0

次のコード:

_CrtCheckMemory();
vector<Vector3> samples = PoissonDisk::generate_poisson(m_resX-1, m_resY-1, minDist, 30, m_samples);
_CrtCheckMemory();
int s = samples.size();

デバッガーは2番目の_CrtCheckMemory()でヒープチェック関数にトラップし、ヒープに問題があることを通知します。したがって、私の想定では、generate_poisson関数が混乱しています。ただし、-_CrtCheckMemory();を追加した場合。generate_poisson関数の最後で、戻る直前に直接呼び出します。その後、デバッガーは、新しく追加された_CrtCheckMemory()ではなく、以前と同じ行にトラップします。

これはどういう意味ですか?

ありがとう!

//編集:別のスレッドがヒープを台無しにしている可能性がありますか、それとも_CrtCheckMemory()は現在のスレッドのヒープのみをチェックしますか?

4

3 に答える 3

0

あなたの「Vector3」クラスが本当の混乱であることを意味するかもしれません。そのコンストラクターを確認してください。

于 2009-11-20T22:07:20.693 に答える
0
  1. Vector3 のコピー コンストラクターを確認する
  2. generate_poisson の戻り値の型は何ですか? ローカル変数への参照を返す場合、悪いことが起こります。
  3. はい、別のスレッドがヒープを台無しにしている可能性があります(ヒープはスレッドごとではありません)が、それが決定論的であるとは思いません(優先度の高いスレッドの実行を許可するミューテックスを解放しない限り)。
于 2011-11-17T10:13:19.977 に答える
0

または、 PoissonDisk::generate_poisson 関数では、スコープが変更されたときに何かが削除されました(関数の終了)。

于 2012-07-25T05:59:39.330 に答える