構造体のベクトルの値をstdoutに出力したいとします。で構造体のベクトルを出力する際の異常な動作
for (itr = ces.begin(); itr < ces.end(); ++itr) {
printf("%s() called\nBaseaddress: 0x%08x\nReturnaddress: 0x%08x\nInFile:%s (Line: %d)\n\n", itr->symbol_name, itr->base_address, itr->return_address, itr->file_name, itr->line_number);
}
:
void debuglib::StdOutLogger::logg(std::vector<CS> ces) {
std::vector<CS>::iterator itr;
for (itr = ces.begin(); itr < ces.end(); ++itr)
{
//printf("%08x", itr->return_address);
printf("%s() called\nBaseaddress: 0x%08x\n", itr->symbol_name, itr->base_address);
printf("Returnaddress: 0x08%x\n", itr->return_address);
printf("In File: %s (Line: %d)\n\n", itr->file_name, itr->line_number);
}
}
このコードは、しかし、動作しない。
typedef struct CallStackEntry {
DWORD64 base_address;
DWORD64 return_address;
char* file_name;
char* symbol_name;
DWORD line_number;
CallStackEntry(DWORD64 ba, DWORD64 ra, char* f_name, char* s_name, DWORD ln) :
base_address(ba), return_address(ra), file_name(new char[strlen(f_name)+1]), symbol_name(new char[strlen(s_name)+1]), line_number(ln)
{
memcpy(file_name,f_name, strlen(f_name)+1);
memcpy(symbol_name,s_name,strlen(s_name)+1);
}
} CS;
次のコードは、印刷のために動作します。次のように
構造体が定義されています2番目のコードリスト、filenumberとreturn_addressは常に0で、filenameは私にいくつかの不明瞭な文字を与えます。
この問題の原因は何ですか?
CS **の仕組みを表示できますか? ** filenumer **とは何ですか? –
これはいくつかの非常に良いヒントです! 残念ながら%lxは問題を解決しません。しかし、あなたがすでに言ったような大きさの問題でなければなりません。 – Chris
サイズでした! DWORD64をDWORDに変更しました。しかし、STACKFRAME構造体にはDWORD64が含まれているので、これを64ビットに移植すると、DWORD64で動作するようになると良いでしょう。しかし、私はあなたにとても感謝しています。 – Chris