c语言中的FREE的用法如题 谢谢了

2025-03-06 12:38:41
推荐回答(1个)
回答1:

别听楼上的瞎讲 int a[100][100];是不能被释放的!因为这是固定分配空间而不是动态分配空间! 这样吧,给你个例子 1. void main(){ int a[100]; free(a);//出错,无法释放固定空间。在程序结束后此空间自动释放 } 2. #include void main(){ int *a; a=(int*)malloc(sizeof(int)*100);//相当于int a[100],只是用动态空间分配 free(a);//成功,释放动态空间 //如果没有上一步,程序结束后不会像1例一样自动释放a的空间!这会造成内存泄露! } 从1、2两例可以看出,free释放的只能是malloc开的空间。 现在来个二维空间的例子 3. #include void main(){ int **a,i; a=(int**)malloc(sizeof(int)*100); for(i=0;i<100;i++)[ a[i]=(int*)malloc(sizeof(int)*100); //懂了吗?先将a开个100的空间,再将a的每一位开空间。就得到a[100][100]的效果 } //释放时先释放a的所有数 for(i=0;i<100;i++)[ free(a[i]); } //最后释放a free(a); } 话说我们要跟上时代,那用C++呢? 4. #include using namespace std; void main(){ int *a,i; a=new int[100]; delete[] a; } 4例是一个很普通的开空间的例子。那么二维呢? 5. #include using namespace std; void main(){ int **a,i; a=new int*[100]; for(i=0;i<100;i++){ a[i]=new int[100]; //原理相同,相当于a[100][100] } //释放原理也相同 for(i=0;i<100;i++){ delete[] a[i]; } delete[] a; }

求采纳