这主要是内存泄漏吗?

时间:2011-09-16 23:46:39

标签: c++ memory

这是我的代码,

class MyClass
{
...
};

int main(){

MyClass class = new MyClass;
/*if i do this,
delete class;
i receive a seg fault*/

return 0;
}

这是内存泄漏吗?如果是,我该如何解决?

提前致谢

4 个答案:

答案 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使用的代码,特别是对于析构函数。