【发布时间】:2013-01-22 03:39:39
【问题描述】:
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:访问冲突读取位置 0xCDCDCDC1。 这显然是一个内存问题,但是你能告诉我在这个代码示例中发生了什么吗?
【问题讨论】:
-
如果您正在编写 C++,请不要编写 C。在 C 和
char *或 C++ 和vector<string>之间进行选择。 -
你在哪里将 name 初始化为 null?;)
-
make name = nullptr 在“默认”构造函数中。
-
在默认构造函数中将
name初始化为NULL。 -
这是毫无意义的代码。只需在你的类定义中说
std::string name;,然后把动态内存管理留给那些比你有更多时间花在这上面的人。你还有更重要的事情要做。
标签: c++ char heap-memory