class A
{
char *name;
public:
A();
A(char*);
~A();
};
A::A()
{
}
A::A(char* s)
{
int k=strlen(s);
name=new char[k+1];
strcpy_s(name,k+1,s);
}
A::~A()
{
if(name!=NULL)
delete[] name;
}
int _tmain(int argc, _TCHAR* argv[])
{
A *v=new A[20];
delete[] v;
system("pause");
return 0;
}
运行时出现以下错误: test212.exe中0x5B987508(msvcr110d.dll)的未处理异常:0xC0000005:访问冲突读取位置0xCDCDCDC。 这显然是一个内存问题,但是请您告诉我这个代码示例会发生什么?
答案 0 :(得分:2)
A *v=new A[20];
通过默认构造函数A
构造新的A::A()
个对象。您的自定义构造函数A::A(char* s)
永远不会被调用,因此,name
永远不会分配任何内存。当析构函数被调用时,你正试图找到那些不存在的delete[]
内存。这导致您看到的例外情况。