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

c语言,动态数组

2015-07-24 17:25 369 查看
试着直接malloc一个2*3*4的空间来模拟数组:

#include <stdio.h>
#include <malloc.h>

int main(void)
{

int*** pArr = NULL;

pArr = (int ***)malloc(2*3*4*sizeof(int));
if(pArr == 0)
{
return -1;
}

memset(pArr, 0, 2*3*4*sizeof(int));

pArr[0][0][1] = 11;
printf("pArr[0][0][1] = %d\n" , pArr[0][0][1]);

free(pArr);
pArr = NULL;

return 0;
}
/*
root@oucaijun:/work/dcc# gcc 1.c ;./a.out
1.c: In function ‘main’:
1.c:17: warning: incompatible implicit declaration of built-in function ‘memset’
Segmentation fault

*/


  

创建与释放一个三维数组:

#include <stdio.h>
#include <malloc.h>

int*** Malloc3DActiveArray(int*** pArr, int x, int y, int z);
void Free3DActiveArray(int*** pArr, int x, int y);
//void Display3DArray(int*** pArr, int x, int y, int z);

int main(void)
{
int x, y, z;
int*** array = NULL;

printf("输入一维长度: ");
scanf("%d",&x);
printf("输入二维长度: ");
scanf("%d",&y);
printf("输入三维长度: ");
scanf("%d",&z);

array = Malloc3DActiveArray(array, x, y, z);
printf("1\n");
printf("array[0][0][1] = %d\n", array[0][0][1]);
Free3DActiveArray(array, x, y);
array = NULL;

return 0;
}

int*** Malloc3DActiveArray(int *** pArr, int x, int y, int z)
{
int i, j, k;
pArr = (int ***)malloc(x * sizeof(int **)); //第一维

for (i = 0; i < x; i++)
{
pArr[i] = (int **)malloc(y * sizeof(int *));//第二维
for (j = 0; j < y; j++)
{
pArr[i][j] = (int *)malloc(z * sizeof(int));//第三维
for (k = 0; k < z; k++)
{
pArr[i][j][k] = i + j + k + 1;
printf("%d ", pArr[i][j][k]);
}
printf("\n");
}
printf("\n");
}

return pArr;
}

void Free3DActiveArray(int*** pArr, int x, int y)
{
int i, j;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
free(pArr[i][j]);//第三维
pArr[i][j] = 0;
}

free(pArr[i]);//第二维
pArr[i] = 0;
}
free(pArr);//第一维
}
/*
root@oucaijun:/work/dcc# gcc 1.c ;./a.out
输入一维长度: 1
输入二维长度: 2
输入三维长度: 3
1 2 3
2 3 4

1
array[0][0][1] = 2

*/


  

c语言中内存的动态分配与释放(多维动态数组构建)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: