为了账号安全,请及时绑定邮箱和手机立即绑定

c++怎么在函数体里使用delete把new的内存释放掉?

c++怎么在函数体里使用delete把new的内存释放掉?

潇湘沐 2019-02-13 15:07:02
在一个函数里面,用new开了一段内存,运算完后,把这个内存的首地址返回,但是怎么delete这个新开的内存呢?int* process(int* arr){int* b = new int[10]; //arr的长度也是10for(int i = 0; i<10; i++)b[i] = *(arr+i) + 1;//delete[] b;//b = NULL;return b;}像这样的函数,怎么使用delete呢,或者有什么别的方法避免使用new和delete呢?谢谢
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

#include <iostream>
using namespace std ;
int* process(int* arr)
{
int* b = new int[10]; //arr的长度也是10
//int* b = (int *)malloc(sizeof(int)*10);//另一种申请内存的方法
for(int i = 0; i<10; i++)
b[i] = *(arr+i) + 1;
return b;
}

int main()
{

int arr[]={0,1,2,3,4,5,6,7,8,9};
int *num;
num = process(arr);
for(int i=0;i<10;i++)
{
printf("%d ",*(num+i));
}

delete[] num;//请注意!!我是在这里释放内存

return 0;
}



查看完整回答
反对 回复 2019-03-22
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

因为你要返回新数组,所以不能在函数中把b给delete了。

要delete b的话,你必须在调用函数的地方的后面进行delete。如果不delete的话就会造成内存泄漏

如果要避免使用new的话,你可以把一个数组传入函数,然后修改他。

int* process(int* arr, int b[])
{
for(int i = 0; i<10; i++)
b[i] = *(arr+i) + 1;
return b;
}



查看完整回答
反对 回复 2019-03-22
  • 2 回答
  • 0 关注
  • 1203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信