unsigned char* Data::getAddress(unsigned char* address)
{
strcpy((char*)address, (char*)this->_address);
return (unsigned char*)address;
}
int main()
{
Data d;
d.makealinkedlisthere();
while (d)
{
unsigned char address[256];
printf("0x%08x \r\n",d.getAddress(address));
d = d.getNext();
}
return 0;
}
これは最初の2つを返します(これは同じで、デバッガとは異なるはずです...)その後クラッシュします。C/C++ strcpy未処理の読み取り違反
リンクされたリストを作成するだけです。保護されたメンバーData* _next
...それらの連鎖。
unsigned char *はMEMORY_BASIC_INFORMATION
データ構造の一部であるWindows関数VirtualQueryEx
の部分です。
this->_address = (unsigned char*)meminfo->BaseAddress; // casted from void*
void *ですが、他のコードではunsigned char *に変換されています。デバッガでは、16進数で表されていることがわかります。
D1: + _address 0x7ffd5000 <Bad Ptr> unsigned char *
D1->_next:+ _address 0x7f6f0000 "áå•ú`©" unsigned char *
D1->_next->_next+ _address 0x7ffb0000 " " unsigned char *
makealinkedlisthere()関数のソースコードを表示してください。 – Flot2011
十分な情報を提供していません。 'Data :: makealinkedlistthere'とは何ですか? –
ここで何が起こっているのか把握するために、データに関する詳細情報を提供する必要があります。特に 'makealinkedlisthere'と' getNext'です。ループは非常に疑わしいと思われる。 – quamrana