编译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++程序的内存分配代码时出错的主要内容,如果未能解决你的问题,请参考以下文章

什么时候用堆,什么时候用栈?

C++中内存分配问题

优化动态分配内存的变量

为啥会出错啊!???????

动态内存分配(c++)

C++核心编程之-内存分区模型