函数返回前后的_CrtCheckMemory

时间:2009-11-20 21:52:22

标签: heap corruption

以下代码:

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

调试器陷入第二个_CrtCheckMemory()中的heapcheck函数,告诉我堆有问题 - 所以我的假设是我的generate_poisson函数搞得一团糟。 但是 - 如果我添加一个_CrtCheckMemory();在返回之前直接在generate_poisson函数的末尾调用,然后调试器仍然像以前一样陷在同一行,而不是新添加的_CrtCheckMemory()

这意味着什么?

谢谢!

//编辑: 可能是另一个线程搞乱了堆,还是_CrtCheckMemory()只检查当前线程的堆?

3 个答案:

答案 0 :(得分:0)

可能意味着你的“Vector3”课程真是一团糟。检查它的构造函数。

答案 1 :(得分:0)

  1. 检查Vector3的复制构造函数
  2. generate_poisson的返回类型是什么?如果它将引用返回到局部变量,则会发生错误。
  3. 是的,可能是另一个线程搞乱了堆(堆不是每个线程),但我不希望这是确定性的(除非你发布一个允许更高优先级线程运行的互斥锁)

答案 2 :(得分:0)

或者在PoissonDisk :: generate_poisson函数中,当范围发生变化(函数结束)时,某些内容已被删除。