【发布时间】:2019-01-05 23:01:43
【问题描述】:
我开始使用 Xcode,但后来决定使用 CLion。
我有这个类有一个指针char * buffer。构造函数如下所示:
example::example (char input[], unsigned long len) {
buffer = new char[len];
for (unsigned long i = 0; i < len; i++) {
buffer[i] = input[i];
}
length = len;
}
析构函数基本上就是delete[] buffer。
在 Xcode 上运行时没有问题,但是在同一台机器上的 CLion 上运行相同的代码时,我收到以下消息:
Project(77633,0x7fffb5cb7340) malloc: *** error for object 0x7f8a35400350: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Process finished with exit code 6
虽然代码运行了,但我仍然觉得它很奇怪,调试后我发现它来自我班级的析构函数。如果我注释掉 delete[] buffer 部分,消息就会消失。
所以现在我很困惑,我认为您应该始终删除您使用 new 分配的内存。不是这样吗?
【问题讨论】:
-
很可能,您的
buffer成员已经被删除(您是否遵循“三规则”?)或已被代码中的其他内容损坏。您还可以使用已不复存在的example实例。 -
不,我错过了复制构造函数,就是这样!我将类的一个实例作为参数传递到其他地方。实现复制构造函数解决了这个问题。 +1 为您的帮助我的朋友。
-
您应该添加您的评论作为答案,这样它才能被投票为正确。
标签: c++ xcode memory-management clion