1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#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++动态创建和释放二维数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#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:
原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang