我有一個類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