看了多维数组和多维指针的 知识 ,就动手写下 一些 bug 方便以后复习。
这是下linux 下用gcc 编译的程序:
#include<stdio.h>
#include<malloc.h>
int*** dy3d(int high,int row,int colu)
{
int i, j;
int ***p1=(int***)malloc(sizeof(int**)*high);
int **p2=(int**)malloc(sizeof(int*)*row*high);
int *p3=(int*)malloc(sizeof(int)*high*row*colu);
//p=temp;
for(i=0;i<high;i++)
{
//*(p1+i)=(p2+row*colu*i);
*(p1+i)=(p2+row*i);
for(j=0;j<row;j++)
{
*(*(p1+i)+j)=(p3+colu*i);
//*(p2+j)=(p3+colu*i);
}
}
return p1;
}
void free3d(int***p)
{
if(**p!=NULL)
{
free(**p);
printf("free3\n");
}
if(*p!=NULL)
{
free(*p);
printf("free2\n");
}
free(p);
printf("free1\n");
return ;
}
int main()
{
int ***p;
int i,j,k;
p=dy3d(50,3,3);
for(k=0;k<50;k+