分配字符串时出现char*new和delete[]错误 我需要一个C++的复习程序。为什么会出现内存异常 pear = new char[1024]; pear = "happy go lucky"; delete [] pear; // exception

分配字符串时出现char*new和delete[]错误 我需要一个C++的复习程序。为什么会出现内存异常 pear = new char[1024]; pear = "happy go lucky"; delete [] pear; // exception,c++,memory,runtime-error,new-operator,delete-operator,C++,Memory,Runtime Error,New Operator,Delete Operator,pear=“祝你好运” 这将替换新字符[]分配的指针。因此,现在您的delete[]pear尝试释放静态分配的字符串 那太糟糕了。您只能删除使用新建分配的内容。由于您重写(并丢失)了该指针,因此无法删除它 pear = new char[1024]; 1024个字符的内存是从堆中分配的,pear指向它的开头 pear = "happy go lucky"; pear现在指向驻留在只读段中的字符串文本,先前分配的内存泄漏 delete [] pear; 您尝试释放只读字符串,这是一种未定义的

pear=“祝你好运”

这将替换
新字符[]
分配的指针。因此,现在您的
delete[]pear
尝试释放静态分配的字符串

那太糟糕了。您只能
删除
使用
新建
分配的内容。由于您重写(并丢失)了该指针,因此无法
删除它

pear = new char[1024];
1024个字符的内存是从堆中分配的,
pear
指向它的开头

pear = "happy go lucky";
pear
现在指向驻留在只读段中的字符串文本,先前分配的内存泄漏

delete [] pear;

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

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

第一行等于
char*pear=new char[1024]