[問題] 三重指標取值後再做加法出現奇怪現象

作者: gary8520 (元丁)   2015-01-20 02:48:50
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
UBUNTU下GCC
問題(Question):
程式運算時,依據使用者輸入情形的不同,需要載入不同大小的三維陣列。
因為我想不到其他方法,所以我先設一個三維指標
int ***OLS;
其中一種情形(A=3)是要把n3這個三維陣列掛進OLS
我用OLS = &n3;
然後問題在於
wht = OLS[ rmd%(A-1) *A*A + p * A + sta] + rmd * A ;
A=3時,OLS裡面的數字只可能是0,1,2
rmd是迴圈變數,若是0沒問題,但是若超過1時
wht得出來的結果竟然會變成12,14,16之類的!(不論A是什麼都錯)
但是如果寫成兩行
wht = OLS[ rmd%(A-1) *A*A + p*A + sta] ;
wht+= rmd*A;
就可以出現正確的結果wht=3,4,5 (A若是其他情形wht的值會正確)
這是怎麼回事??
作者: KAOKAOKAO (鬼斗)   2015-01-20 03:04:00
rmd%(A-1)的意義為何?一般來說%A不是比較對嗎
作者: gary8520 (元丁)   2015-01-20 03:19:00
那個A-1只是剛剛好是這個數字,若之後要把A的範圍擴大就要一個對照表了那個三維陣列,不見得是個CUBE。
作者: LPH66 (-6.2598534e+18f)   2015-01-20 21:10:00
給段程式好了...不過我猜是硬把三維指標當一維用的關係
作者: gary8520 (元丁)   2015-01-22 01:56:00
codepad.org/uiU7IJIi把原始關於這部份CODE貼上來了
作者: yvb   2015-01-22 14:33:00
猜測平台為x86_64. 請檢查 sizeof(int) 和 sizeof(int *).

Links booklink

Contact Us: admin [ a t ] ucptt.com