申请原则:
申请的时候从外层往里层,逐层申请;释放的时候从里层往外层,逐层释放。
- 一维数组分配与释放:
- 分配:
函数原型:char *p = (char )malloc(msizeof(char)); //申请m个int大小空间的p数组
//一维数组组名可以看成数组起始元素的首地址,p表示申请数组的首地址,表示申请char类型,m个char类型大小的空间
- 释放:
free§;
2.二维数组分配与释放:
(1)使用二级指针:
char **p = (char )malloc(msizeof(char *));
for(i=0;i<m;i++)
{
p[i]=(char )malloc(nsizeof(char *));
}
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, row, column, **arr;
while (scanf("%d %d", &row, &column) != EOF) {
arr = (int **)malloc(sizeof(int *) * row); // 分配所有行的首地址
for (i = 0; i < row; i ++) { // 按行分配每一列
arr[i] = (int )malloc(sizeof(int) * column);
}
// 释放开辟的二维数组空间
for (int i = 0; i < row; ++i)
{
free((arr + i));
}
}
return 0;
}
(2)使用数组指针:
char (p)[3] = (char()[3])malloc(sizeof((char)mn);
3.三维数组的分配与释放:
分配:
char p=(char **)malloc(msizeof(char*));
for(i=0;i<m:i++){
p[i]=(char **)malloc(nsizeof(char));
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
p[i][j]=(char )malloc(psizeof(char));
}
}
释放:
for(i=0;i<m;i++){
for(j=0;j<n;j++){
free(p[i][j]);
}
}