动态创建和释放二维数组
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:
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/1855744.html