看板 C_and_CPP 關於我們 聯絡資訊
我用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)