动态创建和释放二维数组
C动态创建和释放二维数组
#include<stdio.h>
#include<stdlib.h>
#define ROW 5
#define COL 4
main(){
int i;
int **arr;
arr=(int **)malloc(ROW*sizeof(int*));
for(i=0;i<ROW;++i)
arr[i]=(int*)malloc(COL*sizeof(int));
printf("%d\n",arr[ROW-1][COL-1]);
for(i=0;i<ROW;++i)
free(arr[i]);
free(arr);
}
使用calloc申请内存时,内存会清0,而malloc并不进行这项工作,所以打印数组元素时得到的随机值。
可以用valgrind工具验证确实没有发生内存泄露:
valgrind --tool=memcheck --leak-check=full ./exefile

但是有errors:

就是因为我们没有给arr[ROW-1][COL-1]赋值就是读取其内容。
C++动态创建和释放二维数组
#include<iostream>
using namespace std;
const int ROW=5;
const int COL=4;
int main(){
int **arr=new int *[ROW];
for(int i=0;i<ROW;++i)
arr[i]=new int[COL]();
cout<<arr[ROW-1][COL-1]<<endl;
for(int i=0;i<ROW;++i)
delete [] arr[i];
delete [] arr;
return 0;
}
注意第10行末尾的圆括号,它表示分配内存时同时初始化(int型就初始化为0)。不加圆括号则没有进行初始化。
没有内存泄露,没有errors:

本文来自博客园,作者:张朝阳讲go语言,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/1855744.html

浙公网安备 33010602011771号