C ++:实例化包含指向char数组的指针的对象数组

时间:2013-02-06 19:52:32

标签: c++ char heap

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。 这显然是一个内存问题,但是请您告诉我这个代码示例会发生什么?

1 个答案:

答案 0 :(得分:2)

A *v=new A[20];通过默认构造函数A构造新的A::A()个对象。您的自定义构造函数A::A(char* s)永远不会被调用,因此,name永远不会分配任何内存。当析构函数被调用时,你正试图找到那些不存在的delete[]内存。这导致您看到的例外情况。