这是我的代码,
class MyClass
{
...
};
int main(){
MyClass class = new MyClass;
/*if i do this,
delete class;
i receive a seg fault*/
return 0;
}
这是内存泄漏吗?如果是,我该如何解决?
提前致谢
答案 0 :(得分:4)
由于您使用class
关键字作为变量,因此甚至不会编译,因此您不会遇到段错误。
如果您修复了这个问题(可能还有其他几个我认为存在但又无法查找的问题),除非构造函数或析构函数中存在严重问题,否则我不会指望它会出现段错误。
首先编译代码,然后我们可以解决任何逻辑错误。
答案 1 :(得分:2)
除了不能将类用作变量名之外,C ++中的new运算符将返回指向MyClass类型的对象的指针。该声明应该是:
MyClass *objectPtr = new MyClass;
如果你没有删除它,它将一直存在于内存中,直到程序结束,因此算作泄漏(大概)。
答案 2 :(得分:0)
假设您将变量名称设为正确并使其为MyClass *
,那么这是内存泄漏。因为你通过致电new
获得了记忆,但你还没有给回记忆。
当你完成使用它时,解决方案是delete
指针。
例如:
MyClass *c = new MyClass;
...
delete c;
请注意,如果你有new
个数组,你需要像这样释放它:
MyClass *c_arr = new MyClass[10];
...
delete[] c_arr;
答案 3 :(得分:0)
回答这个问题,是的。使用new进行分配而不删除是内存泄漏。然而,具有讽刺意味的是,内存泄漏是这段代码片段中最温和的问题,因为程序在“泄露”的那一刻终止,所以它甚至都不会有问题。
我假设这是'伪代码',所以我不会指出编译错误。但是避免伪代码是有帮助的,因为它不允许人们看到你不会在代码片段中包含的问题。
如果delete
导致段错误,我认为这是你真正的问题,那么你的问题可能是除了内存泄漏之外的其他一些问题。内存泄漏通常不会导致立即的段错误,它们必须首先耗尽可用的内存池。如果这是你的问题,可能有助于包含MyClass使用的代码,特别是对于析构函数。