私がやる:私はこれは私は、次の奇妙なデータを取得free_entire_store
の先頭にブレークポイントを置くgdbを場合ポインタを渡す:スタックに異なる値がありますか?
typedef struct {
Scene *scene;
MeshStore *store;
float angle;
} DebugModel
...
free_entire_store(debug_model.store);
/* Frees the store and any meshes related to it */
void free_entire_store(MeshStore *store) {
/* implementation not important for the problem at hand */
}
は今..
(gdb) p debug_model
$5 = {scene = 0x1044a680, store = 0x1044a630, angle = 87.8401108}
(gdb) p store
$6 = (MeshStore *) 0x10438b40
debug_modelは、グローバル、上記のデバッグ出力であります彼がプログラムと同じポイントintからです。
私は単純にパラメータとしてポインタを渡しても、何とか変更されます。スタックは壊れていますが、非常に予測可能です(実行ごとに同じデータが表示されます)。これが原因でしたか?私はこの関数を呼び出す前にanythignを何回か解放したとは思わない。パラメータとして渡された値は、スタックの値とどのように対応していませんか?
valgrindで実行してください。 – EmeryBerger
文脈がなければ、言うことは不可能です。問題を引き続き表示するために必要な最小限のコードを削減してください。 –
私はスタックの破損がこれを引き起こす可能性があるのだろうかと思います。私がgdbから知ることができるのは、スタックされた値intがパラメータとして渡された値ではないということだけです。ヴァルグリンドはそれ以上のことを教えてくれるだろうか? – buddhabrot