0

以下代码:

_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 函数的末尾直接调用,就在 return 之前,那么调试器仍然像以前一样在同一行捕获,而不是在新添加的 _CrtCheckMemory()

这意味着什么?

谢谢!

//edit: 是否有可能是另一个线程搞砸了堆,或者 _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 回答