有没有办法释放*data
在此代码中使用的内存?
#include <iostream>
#include <stdlib.h>
using namespace std;
class mstring {
public:
char *data;
int length;
mstring::mstring()
{
length = 8;
data = new char[length];
data = "UNKNOWN";
cout << "In mstring default ctor" << endl;
}
mstring::~mstring()
{
delete[] data;
cout << "In mstring dtor" << endl;
}
};
int main() {
mstring a;
cout << a.data;
}
代码在尝试删除时崩溃为&#34; UNKNOWN&#34;无法删除。
答案 0 :(得分:2)
您的问题在于以下代码:
data = new char[length];
data = "UNKNOWN";
首先,创建一个新的char数组,在下一个语句中,通过用可存储在可执行文件中的文字字符串“UNKNOWN”的地址覆盖它,松开它的唯一锚点。 / p>
当你最终进入析构函数时,你试图删除可执行文件的内存,因为你不再引用已分配的内存。
由于您无法使用std::string
或strcpy
,我猜您必须自己编写:
auto fixedUnknownString = "UNKNOWN";
assert(fixedUnknownString[length] == '\0'); // Lucky coinsidence, extra code required if we wouldn't have an exact match
for (std::size_t i = 0; i < length; ++i) {
data[i] = fixedUnknownString[i];
}