मैं एक वर्ग Foo
जिसके लिए मैं + ऑपरेटर अतिभारित किया है इस प्रकार है के साथ एक प्रतिलिपि रिटर्निंग:अतिभारित ऑपरेटरों
Foo Foo::operator+(const Bar &b)
{
Foo copy = (*this);
if (someCondition) return copy;
//snip
}
मेरे लिए
, इस उचित लग रहा है। हालांकि, जब भी मैं प्रतिलिपि वापस कर रहा हूं, विजुअल स्टूडियो मुझे एक त्रुटि का संकेत देता है जो 'ढेर के भ्रष्टाचार के कारण हो सकता है'। क्या मैंने जो किया है उसके साथ कुछ गड़बड़ है?
संपादित करें: अधिक जानकारी के साथ अद्यतन।
त्रुटि संदेश:
विंडोज sample.exe में एक ब्रेकपाइंट शुरू हो गया है।
यह ढेर का अपभ्रंश है, जो sample.exe या DLLs यह लोड हो जाने से किसी में एक बग को इंगित करता है की वजह से हो सकता है।
यह उपयोगकर्ता के कारण भी हो सकता है 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));
}
क्या आप हमें 'फू' की कॉपी कन्स्ट्रक्टर दिखा सकते हैं? –
त्रुटि का कोड क्या है? – metdos
@ Space_C0wb0y @metdos मैंने अधिक जानकारी के साथ अपडेट किया है – socks