作者JULIKEBEN (啾西)
看板C_and_CPP
标题[问题] malloc()和三维阵列
时间Tue Dec 8 22:49:45 2009
我用malloc尝试写配置三维的阵列
我不知道这样的结果对与否要怎样判断囧
(程式码附在下方)
想请板上高手提供方法,,该如何验证此段程式码有无错误
我是采用印出位址的方式
可是好像malloc所配置的记忆体不一定会是连续(?)
而会能够相当於阵列的因素是,,他是利用pointer使其连续
但真实的记忆体位置却不一定如此
不知道这样解读对不对
另外有观察到
同一系列的会固定加四
可是要往下跳下一组,,就会没有规律的跳一些,,然後在往下加四
不知道这是不是正常现象
另外也想问,,
有办法用动态记忆体配出跟阵列宣告一样的结果吗
谢谢
===========================以下是我的程式码===================================
#include<stdio.h>
#include<stdlib.h>
int ***allocThreeDimIntArray(int size1,int size2,int size3);
void freeThreeDimIntArray(int ***b,int size1,int size2);
int main()
{
int m , n , q , i , j ,k;
int ***b;
printf("arrary b[m][n][q]\nenter the m , n , q\n");
scanf("%d%d%d",&m,&n,&q);
b=allocThreeDimIntArray(m,n,q);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<q;k++)
{
printf("b[%d][%d][%d]位址:%p\n",i,j,k,&b[i][j][k]);
}
}
}
freeThreeDimIntArray(b,m,n);
system("pause");
return 0;
}
int ***allocThreeDimIntArray(int size1,int size2,int size3)
{
int i,j;
int ***b=(int ***)malloc(size1*sizeof(int **));
if(b==NULL)
{
printf("Error!\n");exit(1);
}
for(i=0;i<size1;i++)
{
b[i]=(int **)malloc(size2*sizeof(int *));
if(b[i]==NULL)
{
printf("Error!\n");exit(1);
}
for(j=0;j<size2;j++)
{
b[i][j]=(int *)malloc(size3*sizeof(int));
if(b[i][j]==NULL)
{
printf("Error!\n");exit(1);
}
}
}
return b;
}
void freeThreeDimIntArray(int ***b , int size1 , int size2)
{
int i,j;
for(i=0;i<size1;i++)
{
for(j=0;j<size2;j++)
{
free(b[i][j]);
}
}
for(i=0;i<size1;i++)
free(b[i]);
free(b);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.198.83
※ 编辑: JULIKEBEN 来自: 140.114.198.83 (12/08 23:44)