您的位置:首页 > 编程语言 > C语言/C++

第七篇:C/C++动态内存的分配问题

2015-08-12 11:09 393 查看
碰到需要使用动态内存的问题,关于二维数组德尔动态内存分配问题

[cpp] view
plaincopy

//二维数组动态数组分配和释放

//数组指针的内存分配和释放

//方法一

char (*a)
;//指向数组的指针

a = (char (*)
)malloc(sizeof(char
) * m);



free(a);



//方法二

char **a;

int i;

a = (char **)malloc(sizeof(char *) * m);//分配指针数组

for(i=0; i<m; i++)

a[i] = (char *)malloc(sizeof(char) * n);//分配每个指针所指向的数组



for(i=0; i<m; i++)

free(a[i]);

free(a);



//方法三

char **a;

int i;

a = (char **)malloc(sizeof(char *) * m);//分配指针数组

a[0] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空间

for(i=1; i<m; i++)

a[i] = a[i-1] + n;



free(a[0]);

free(a);





//指针数组的内存分配和释放

//方法一

char* a[M];//指针的数组

int i;

for(i=0; i<M; i++)

a[i] = (char *)malloc(sizeof(char) * n);



for(i=0; i<M; i++)

free(a[i]);



//方法二

char* a[M];//指针的数组

int i;

a[0] = (char *)malloc(sizeof(char) * M * n);

for(i=1; i<M; i++)

a[i] = a[i-1] + n;



free(a[0]);

C++

[cpp] view
plaincopy

//二维数组动态数组分配和释放

//数组指针的内存分配和释放

//方法一

char (*a)
;//指向数组的指针

a = new char[m]
;



delete[] a;



//方法二

char **a;

a = new char* [m];//分配指针数组

for(int i=0; i<m; i++)

a[i] = new char
;//分配每个指针所指向的数组



for(i=0; i<m; i++)

delete[] a[i];

delete[] a;





//指针数组的内存分配和释放

//方法一

char **a;

a = new char* [m];

a[0] = new char[m * n];//一次性分配所有空间

for(int i=1; i<m; i++)

a[i] = a[i-1] + n;//分配每个指针所指向的数组



delete[] a[0];

delete[] a;



//方法二

char* a[M];//指针的数组

for(int i=0; i<M; i++)

a[i] = new char
;



for(i=0; i<M; i++)

delete[] a[i];



//方法三

char* a[M];//指针的数组

a[0] = new char[M*n];

for(int i=1; i<M; i++)

a[i] = a[i-1] + n;



delete[] a[0];

//以上方法很详细,基本上可以解决所的问题
//NEW和DELETE需要配对使用,避免内存泄露
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: