分配字符串时出现char*new和delete[]错误 我需要一个C++的复习程序。为什么会出现内存异常 pear = new char[1024]; pear = "happy go lucky"; delete [] pear; // exception
pear=“祝你好运” 这将替换分配字符串时出现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; 您尝试释放只读字符串,这是一种未定义的
新字符[]
分配的指针。因此,现在您的delete[]pear
尝试释放静态分配的字符串
那太糟糕了。您只能删除使用新建分配的内容。由于您重写(并丢失)了该指针,因此无法删除它
pear = new char[1024];
1024个字符的内存是从堆中分配的,pear
指向它的开头
pear = "happy go lucky";
pear
现在指向驻留在只读段中的字符串文本,先前分配的内存泄漏
delete [] pear;
您尝试释放只读字符串,这是一种未定义的行为,表现为运行时异常。您所做的是将pear
分配给堆上已分配的字符数组,然后重新分配它以指向位于静态位置的字符串。如果您试图删除,它将出错,因为您不应该删除该静态位置中的内容。第一行等于char*pear=new char[1024]代码>?