作者ablboy (卖闷! 卖共! (M))
看板Programming
标题Re: [问题] struct 的 指标成员
时间Wed May 7 23:59:19 2008
小弟做了一个测试的程式
在宣告位址後列印出来
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