C++ 内存分配 new[] 和 delete[]

标签 c++ memory allocation

我正在尝试动态分配一个新对象。

  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/

相关文章:

c++ - 涉及优化器的局部变量构建和销毁

c++ - 为什么C++空类没有字节对齐?

c++ - 确定何时在VS2010而不是VS2008中使用VC90编译器?

c++ - C++ 中的 Iterator 不是一种指针吗?

c++ - 独立 exe : Where on disk to save config files and logs?

java - Java中ArrayList的内存大小是多少

c++ - 直接从数组读取时越界地址

c++ - 打开简历;如何释放 IplImage*?

c 指向指针内存分配的指针

c++ - SFINAE:启用类构造函数