动态创建和释放二维数组

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:

posted @ 2010-10-19 18:16  高性能golang  阅读(9573)  评论(6编辑  收藏  举报