动态创建和释放二维数组

来源:互联网 发布:python 聚合搜索 编辑:程序博客网 时间:2024/05/17 07:30

C动态创建和释放二维数组

#include<stdio.h>#include<stdlib.h>#define ROW 5#define COL 4main(){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:

原创粉丝点击