次のようなプロトタイプを持つ関数があります。
void function(std::string str);
この関数は、その dll をロードして使用する別のプログラムのメイン関数で呼び出されます。
function("some string value here");
この関数から戻ると、ヒープ破損エラーが発生します。
Windows は、program.exe でブレークポイントをトリガーしました。
これは、ヒープの破損が原因である可能性があります。これは、program.exe またはそれがロードした DLL のバグを示しています。
これは、ユーザーが program.exe にフォーカスがあるときに F12 キーを押したことが原因である可能性もあります。
出力ウィンドウには、より多くの診断情報が表示される場合があります。
コードをいじってみると、いくつかの奇妙な観察結果に気付きました
。 1. 渡された文字列の長さが 11 文字未満の場合、エラーは発生しませんが、さらに文字を追加するとすぐにエラーが表示されます。
2. パラメータの型を からstd::string
に変更するとstd::string&
、エラーが消えます。参照を渡すというアイデアはhereから生まれました。
3. 関数の本体をコメントアウトしました。そこの操作は、生成された例外とは関係ありません。
4. パラメータ タイプを からstd::string
に変更char*
すると、問題も解決します。
このエラーの原因は何ですか? どうすれば解決できますか?