特定のポインター アドレスを に出力するとstd::cout
、クラッシュが発生します。
bool MyClass::foo() const
{
std::cout << "this prints fine" << std::endl << std::flush;
std::cout << d << std::endl << std::flush; // crash!
return true;
}
はクラスのポインタメンバd
です。つまり、次のとおりです。
class MyClass {
// ...
private:
MyClassPrivate* d;
};
アプリケーションがクラッシュする原因は何ですか? NULL ポインターまたは初期化されたポインターであっても、(おそらく無効な) アドレスを出力する必要がありますよね?
違いが生じる場合、アプリケーションはデバッグ モードでコンパイルされます。関数foo
はインラインとしてマークされていません。
背景: 外部アプリケーション プロセスのバグを追跡しようとしています。このバグは、別のアプリケーションが連射コマンドをプロセスに送信した場合にのみ発生します。std::cout
外部プロセスの実行を追跡するために使用しています。