我有一个类Foo
对我已经重载+操作如下副本:返回与运算符重载
Foo Foo::operator+(const Bar &b)
{
Foo copy = (*this);
if (someCondition) return copy;
//snip
}
对我来说,这看起来是合理的。但是,每当我返回副本时,Visual Studio都会向我发出“可能由于堆损坏”导致的错误。我所做的是否有问题?
编辑:与更多信息更新。
错误消息:
Windows已经在 SAMPLE.EXE触发一个断点。
这可能是由于 堆的腐败,这表明在 SAMPLE.EXE或任何它 加载的DLL的一个错误。
这也可能是由于用户 按F12而sample.exe有 的重点。
输出窗口可能有更多 诊断信息。
复制构造:
Foo::Foo(const Foo&p)
{
some_pointer = p.get_some_pointer();
some_value = p.get_some_value();
}
代码它打破到:
//within dbgheap.c
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
if (!pUserData)
return FALSE;
if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
return FALSE;
return HeapValidate(_crtheap, 0, pHdr(pUserData));
}
你能告诉我们'Foo'的拷贝构造函数吗? – 2011-03-04 07:37:31
什么是错误代码? – metdos 2011-03-04 07:42:29
@ Space_C0wb0y @metdos我已更新了更多信息 – socks 2011-03-04 07:50:49