Debug Assertion Failed in such simple example
主.cpp
1 2 3 4 5 6 7 8 9 10 | #include <iostream> #include"Simple.h" using namespace std; int main() { Simple s; s = Simple(); } |
简单.cpp
1 2 3 4 5 6 7 8 9 10 11 12 | #include"Simple.h" Simple::Simple(void) { ptr = new int[10]; } Simple::~Simple(void) { delete [] ptr; } |
号
简单.h
1 2 3 4 5 6 7 8 9 10 | #pragma once class Simple { public: Simple(void); ~Simple(void); private: int* ptr; }; |
当我运行main.cpp时,程序停止并返回一个错误:
Microsoft Visual C++ Debug Library
Debug Assertion Failed!Program: ...ts\Visual Studio 2010 C++\simple error\Debug\simple
error.exe File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp
Line: 52Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information on how your program can cause an assertion failure,
see the Visual C++ documentation on asserts.(Press Retry to debug the application)
号
为什么会发生在这种常见的例子中?
您需要添加一个复制构造函数和赋值运算符。现在,你的台词
1 | s = Simple(); |
执行以下操作:
- 创建一个临时的
Simple ,为指向的指针分配内存。 - 将它赋给
s ,它只复制临时文件中的指针。 - 再次销毁临时内存,释放临时内存中的指针和
s 中的指针指向的内存。
此时,