我用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)