Re: [問題] struct 的 指標成員

看板Programming作者 (賣悶! 賣共! (M))時間16年前 (2008/05/07 23:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
小弟做了一個測試的程式 在宣告位址後列印出來 int initBlock(theBlock** pBk){ int x,y; *pBk = (theBlock*)malloc( sizeof(theBlock) ); (*pBk)->pStmt = ( char ***)malloc( 3*sizeof( char **) ); for( x = 0 ; x < 3 ; x++ ) { (*pBk)->pStmt[x] = ( char **)malloc( 2*sizeof( char *) ); for( y = 0 ; y < 2 ; y++ ){ (*pBk)->pStmt[x][y] = ( char *)malloc( 3*sizeof( char) ); if(x == 0 && y == 0) printf("pStmt[0][0][0] => %x\n",((*pBk)->pStmt[x][y]+0)); } } printf("check pStmt[0][0] => %x\n",(*pBk)->pStmt[0][0]); printf("check pStmt[0][0][0] => %x\n",(*pBk)->pStmt[0][0][0]); return 0; } 輸出結果如下 pStmt[0][0][0] => 3d3ef5 check pStmt[0][0] => 3d3ef0 check pStmt[0][0][0] => ffffff90 ※ 引述《littleboypis (littleboypis)》之銘言: : ※ [本文轉錄自 C_and_CPP 看板] : 作者: littleboypis (littleboypis) 看板: C_and_CPP : 標題: [問題] struct 的 指標成員 : 時間: Sun May 4 01:44:35 2008 : 我建了一個 struct : 裡頭只有一個member : 他是一個三維的字元陣列 (*** char) : ptrBlock bk = (ptrBlock)malloc( sizeof(Block) ); : bk->stmt = ( char ***)malloc( 3*sizeof( char **) ); : for( x = 0 ; x < 3 ; x++ ) { : bk->stmt[x] = ( char **)malloc( 2*sizeof( char *) ); : for( y = 0 ; y < 2 ; y++ ) : bk->stmt[x][y] = ( char *)malloc( 3*sizeof( char) ); : } : 然後把他傳到一個function : setValue(bk->stmt); : //原型長這樣 : //void setValue(char arrays[3][2][3]) ^^^^^^^^^ 依照最上面結果 如果function裡面設定值的方式也是用三維直接設定 我想會將值設定到奇怪的記憶體位址去 然而系統會不允許程式將值設定到非自己記憶體能控制的範圍外 所以出現 Segmentation fault 基本上建議三維指標來傳資料 function可改為 void setValue(char arrays, int x, int y, int z) 設定時候改為 *(*(*(arrays + x) + y ) + z) = inputV; PS: 甚至於在malloc的時候改為 *(*(bk->stmt + x) + y) = ( char *)malloc( 3*sizeof( char) ); 會不會比較理想 : 設定完值後 : printf("AFTER %c \n", bk->stmt[0][0][0]); : 回傳回來在印出來卻出現Segmentation fault : 麻煩各位幫我看一下 : 我是哪一邊關念錯了 : 謝謝 : 格式化後的程式碼 : http://rafb.net/p/Ym4oBS57.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.49.248
文章代碼(AID): #188T7O8y (Programming)
文章代碼(AID): #188T7O8y (Programming)