我正在尝试动态分配一个新对象。
int len = (nm == NULL) ? 0 : strlen(nm);
try {
name = new char[len + 1];
}
catch(std::bad_alloc) {
name = NULL;
}
if(name) {
if(nm == NULL)
strcpy(name, "");
else
{
strcpy(name, nm);
cmds=new command [num_of_cmds];
然后我的析构函数通过
删除它们robot::~robot()
{
if (name) {
delete[] name;
}
delete [] cmds;
}
我不断遇到段错误,如果我编辑一些代码来初始化一个简单 int 上的值,它就会中断。我的 delete[] cmds 坏了所以我必须把它注释掉。任何帮助将不胜感激。如果人们需要,我会澄清更多事情。
最佳答案
当您的机器人名称为 NULL (nm == NULL
) 时,您分配一个空字符串,但不要分配cmds
.因此,您至少应在该分支中将 cmds 设置为 NULL,或者在 delete [] cmds;
之前检查析构函数 if (name && *name != 0)
。我会选择第一个选项...
关于C++ 内存分配 new[] 和 delete[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040436/