gpt4 book ai didi

c++ - 通过 C++ 中的函数返回数组

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:14 25 4
gpt4 key购买 nike

它会得到意想不到的值(value):

double* myFunction()
{
double a[2];
a[0]=0.1;
a[1]=0.2;
return a;
}
int main()
{
double* a = myFunction();
cout<<a[0]; // it is not 0.1
cout<<a[1]; // it is not 0.2
}

它将获得期望值:

double* myFunction()
{
double* a = new double[2];
a[0]=0.1;
a[1]=0.2;
return a;
}
int main()
{
double* a = myFunction();
cout<<a[0]; // it is 0.1
cout<<a[1]; // it is 0.2
}

这两种方法有什么区别?

为什么第一种方法不能正常工作?

最佳答案

第一种方式:

 double a[2];

是分配在栈上的局部数组,它的内存会在 myFunction 退出时释放,所以 double* 会指向已释放的内存,你看到了垃圾值。

double* a = new double[2];

它也是一个在堆上动态分配的局部数组,但是它的内存不会在myFunction退出时释放,double*会指向那个数组当 myFunction 返回时。您需要显式调用 delete[] a 来释放内存。

关于c++ - 通过 C++ 中的函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com