猿问

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

在一个函数里面,用new开了一段内存,运算完后,把这个内存的首地址返回,但是怎么delete这个新开的内存呢?

int* process(int* arr)
{
int* b = new int[10]; //arr的长度也是10
for(int i = 0; i<10; i++)
b[i] = *(arr+i) + 1;

//delete[] b;
//b = NULL;
return b;
}

像这样的函数,怎么使用delete呢,或者有什么别的方法避免使用new和delete呢?谢谢

潇湘沐
浏览 1200回答 2
2回答

繁星coding

#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&nbsp;= process(arr);for(int i=0;i<10;i++){printf("%d ",*(num+i));}delete[] num;//请注意!!我是在这里释放内存return 0;}

白衣染霜花

因为你要返回新数组,所以不能在函数中把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;}
随时随地看视频慕课网APP

相关分类

WebApp
我要回答