c++ - 如何通过引用或指针传递的指针正确释放函数中分配的 main 内存?

标签 c++ memory-management pass-by-reference

我正在编写一个由 main 调用的函数,它将内存分配给在 main 中声明的几个指针。我知道我可以通过使用指向指针的指针或指向指针的引用来做到这一点,但是我在 main 中释放这些内存时遇到了问题。请帮助我解决以下代码中的错误:

1.使用指向指针的指针:

void fun1(int **a, double **b, char **c)
{

    *a=new int[20];
    *b=new double[20];
    *c=new char[10];

    for (int i=0;i<20;i++){
        (*a)[i]=i;
        (*b)[i]=sqrt((double)((*a)[i]));
    }
    *c="0123456789";

}


int _tmain(int argc, _TCHAR* argv[])
{
    int *a;
    double *b;
    char *c;

    fun1(&a,&b,&c);
    cout<<"a & b are:"<<endl;
    for(int i=0;i<20;i++)
        cout<<a[i]<<"\t"<<b[i]<<endl;
    cout<<"c is: "<<c<<endl;

    delete[] a;
    delete[] b;
    delete[] c;
    return 0;
}

2。使用对指针的引用:

void fun1(int*& a, double*& b, char*& c)
{

    a=new int[20];
    b=new double[20];
    c=new char[10];

    for (int i=0;i<20;i++){
        a[i]=i;
        b[i]=sqrt((double)a[i]);
    }
    c="0123456789";

}


int _tmain(int argc, _TCHAR* argv[])
{
    int *a;
    double *b;
    char *c;

    fun1(a,b,c);
    cout<<"a & b are:"<<endl;
    for(int i=0;i<20;i++)
        cout<<a[i]<<"\t"<<b[i]<<endl;
    cout<<"c is: "<<c<<endl;

    delete[] a;
    delete[] b;
    delete[] c;
    return 0;
}

非常感谢!

最佳答案

这在 fun1()

*c="0123456789";

main()

中紧随其后
delete[] c;

是未定义的行为,因为您尝试delete[] 一个字符串文字。

关于c++ - 如何通过引用或指针传递的指针正确释放函数中分配的 main 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261664/

相关文章:

c++ - 为什么单独初始化一个新变量是有效的?

c++ - 使用 std::function 对象将自定义删除器传递给 std::unique_ptr

java - 没有数据成员的类在java中有内存占用吗?

c++ - 使用 CreateThread() 通过引用传递

javascript - 修改自执行函数中的参数

c++ - 旋转对象以指向鼠标位置

c++ - 创建一个类来表示商店的库存是否有意义?

c++ - 线程安全内存池

memory-management - 为什么这个 tensorflow 循环需要这么多内存?

python - 无法在嵌套函数内的python中按值传递