Re: [問題] struct 的 指標成員
小弟做了一個測試的程式
在宣告位址後列印出來
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):