C++ 动态记忆是如何与CLion一起工作的?

C++ 动态记忆是如何与CLion一起工作的?,c++,xcode,memory-management,clion,C++,Xcode,Memory Management,Clion,我开始使用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; } 虽然代码

我开始使用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
部分,消息就会消失


所以现在我很困惑,我想你应该总是删除你用
new
分配的内存。不是吗?首先,CLion和Xcode都不是编译器。 在后台,他们运行一些可配置的编译器。 最有可能的是gcc或带有编译标志的某个版本的clang 这也是可配置的。因此,首先要确定哪个编译器 正在每个环境中使用。那么回答这个问题就容易多了。 当然,始终需要一个最小的完整且可验证的示例。
顺便问一下,你确定len不是0吗?当试图分配0字节时,会发生不好的情况…

最可能的情况是,您的
缓冲区成员已被删除(您是否遵循“三个规则”?),或者已被代码中的其他内容损坏。您还可以使用一个已不存在的
示例
实例。不,我缺少复制构造函数,就是这样!我将该类的一个实例作为参数传递到其他地方。实现复制构造函数解决了这个问题+1谢谢你的帮助,我的朋友。你应该添加你的评论作为答案,这样它才能被认为是正确的。很好地理解了0的len值。非常感谢。
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