编译c++程序的内存分配代码时出错
Posted
技术标签:
【中文标题】编译c++程序的内存分配代码时出错【英文标题】:got error while compiling memory allocation code of c++ program 【发布时间】:2020-06-07 07:48:37 【问题描述】:我正在用 C++ 编写内存分配程序,但程序出错。 我不明白发生了什么。 请帮忙。
#include<iostream>
using namespace std;
class Test
int *m_ptr;
private:
void Test()
m_ptr = new int(4);
~Test(class Test)
cout<<"Object gets destroyed..";
;
int main()
Test *ptr = new Test();
delete [] ptr;
我也是 C++ 新手
【问题讨论】:
got an error
请引用完整的错误信息,应该指出问题所在。
【参考方案1】:
private:
void Test()
m_ptr = new int(4);
应该是
public:
Test()
m_ptr = new int(4);
构造函数没有返回类型,如果你想在main
中使用它,它应该是公共的。
和
~Test(class Test)
cout<<"Object gets destroyed..";
应该是
~Test()
cout<<"Object gets destroyed..";
析构函数没有参数,它们应该(几乎总是)是公共的。
还有
delete [] ptr;
应该是
delete ptr;
如果您使用new
分配,那么您使用delete
取消分配。仅当您使用new[]
分配时,您才会使用delete[]
解除分配。
在一个非常小的程序中有很多基本的语法错误。无论您正在寻找什么资源来学习 C++ 程序的结构,都不是很好。在进行内存分配(这是一个非常复杂的主题)之前,可能值得花一些时间练习更简单的主题,
感谢 dvix 和用户帮助我发现代码中的其他问题。
【讨论】:
D-tor 也有问题(应该是delete [] m_ptr
)。 Test
类需要专门的 copy c-tor 和 move c-tor,否则它们很容易运行到双重释放和内存泄漏。
谢谢兄弟。现在我明白我在哪里做错了。【参考方案2】:
您的构造函数和析构函数(被调用)应该是public
而不是private
。
此外,析构函数不接受任何参数。应该是
~Test()
cout<<"Object gets destroyed..";
【讨论】:
以上是关于编译c++程序的内存分配代码时出错的主要内容,如果未能解决你的问题,请参考以下文章