首页 > 解决方案 > (C ++)如何在函数之间传递指向分配有'new'的对象的指针而不会导致内存泄漏?

问题描述

我正在研究一个旨在了解使用 C++进行内存管理的项目,

在函数内部,如果我创建一个新的 Student 对象数组,执行函数操作,然后返回指向该数组的指针,如下所示:

int main(){

    Student *ptr = new newStudents[50];
    Student p.FunctionCall(ptr);
    //stuff
    delete[] ptr;
    return 0;

}

然后,我将在 main 和其他类方法中实例化对象(制作副本),并注意delete[]在每次使用后调用。

只要我记得从它存在的最后一个位置调用删除,它是否会导致内存泄漏将堆指针从函数传递回主函数或其他函数?

约束:没有智能指针,没有命名空间,也没有 C++ 11 或更高版本。

是为了一个任务。所有帮助表示赞赏。

标签: c++pointersmemory-managementscopeheap-memory

解决方案


正确的语法是:

MyClass* function(const char* file) {
    MyClass *x = new MyClass[50];  //class_type* array_name = new class_type[amount];

    //stuff to parse values and then instantiate my classes

    return x;  // return x directly as a pointer..
}

首先..不要取消引用您从中获得的指针new并返回它,因为它不是指向指针的指针或指向实例的指针。它实际上是一个指向数组内存的指针,通过取消引用它,您将返回一个实例并丢失其余的......导致泄漏。

因此,按照您的方式,您现在可以执行以下操作:

int main()
{
    MyClass* array = function("some_file.txt");
    // do something with the array above..
    delete[] array;  //clean up..
}

推荐阅读