【问题标题】:char* new and delete [] error when a string is assigned分配字符串时 char* new 和 delete [] 错误
【发布时间】:2012-05-06 20:59:02
【问题描述】:

我需要一个 C++ 复习。为什么会出现内存异常?

pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception

【问题讨论】:

  • 第一行是否等于char* pear = new char[1024]; ?

标签: c++ memory runtime-error new-operator delete-operator


【解决方案1】:

pear = "祝你好运";

替换new char[]分配的指针。所以现在你的delete[] pear 尝试释放静态分配的字符串。

这很糟糕。你只能delete 分配给new 的东西。而且由于您覆盖(并丢失)了该指针,因此您不能delete它。

【讨论】:

    【解决方案2】:
    pear = new char[1024];
    

    1024 个字符的内存是从堆中分配的,pear 指向它的开头。

    pear = "happy go lucky";
    

    pear 现在指向位于只读段中的字符串文字,并且之前分配的内存已泄漏。

    delete [] pear;
    

    您尝试释放只读字符串,这是一种未定义的行为,表现为运行时异常。

    【讨论】:

      【解决方案3】:

      您正在做的是将pear 分配给堆上已分配的字符数组,然后重新分配它以指向位于静态位置的字符串。如果您尝试删除它会出错,因为您不应该删除该静态位置中的内容。

      【讨论】:

        猜你喜欢
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        相关资源
        最近更新 更多