我在看別人寫好的源代碼,因為讀的困難,想看看資料結構的具體資料,讓自己有點概念,但是卻在輸出時遇到問題。
我把源程式的部分代碼寫一下:
typedef struct{
..........
SVector dur;
.........
}HMMDef;
typedef Vector SVector;
typedef float *Vector; //vector[1...size]
HMMDef *hmm;
hmm = node->info.hmm;
以上是源程式中的部分代碼,整個源程式我都運行過,沒問題,我想看hmm結構里的dur的具體值,看描述這個dur應該是個float型的陣列。
下面是我自己的代碼
float myf = 0.0;
..........
myf = (hmm->dur)[0];
printf("%f",myf);
.........
以上是我的代碼,如果有myf = (hmm->dur)[0]; 沒有printf("%f",myf); 編譯通過,運行沒問題
如果沒有myf = (hmm->dur)[0]; 但有printf("%f",myf); 編譯通過,運行沒問題,可以輸出0.0
但是如果,既有 myf = (hmm->dur)[0]; 下一句又有printf("%f",myf); 編譯會通過,但是運行時就會中斷,中斷的提示是:
Unhandled exception at 0x00418772 in HVite.exe: 0xC0000005: Access violation reading location 0x00000000
我昨天也遇到類似的問題,是想看其他結構體的資料,簡直是一模一樣的問題,加了printf就不行,我還以為我對昨天的結構體理解的有問題,今天換了個變數觀察,還是不行,但是對于結構體中,有些變數可以輸出,但是很多變數就printf不了,就如同上面這個,真的頭大,不知道啥問題,是不是源代碼哪里有設定,不讓讀者看一些資料,C語言可以做這樣的設定嗎?不懂,誰幫一些忙吧,謝謝

uj5u.com熱心網友回復:
Access violation是因為訪問了一塊無效的記憶體要么訪問的記憶體已經釋放了
要么使用了一個還未創建物件的指標
記得初始化指標,也記得洗掉指標后置為NULL
uj5u.com熱心網友回復:
這個指標為NULL,差不多就是讀取了空指標的值出錯,但為啥myf=(hmm->dur)[0]這句不報錯呢?uj5u.com熱心網友回復:
dur應該是個指標,指標需要初始化,陣列定義后分配好了空間,可以直接賦值。uj5u.com熱心網友回復:
這是空指標,但前天我在讀取其他指標時確實判斷了是否為空,前天報錯是0x00000005,這么小的地址讓我怎么判斷呢?又不是空轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41203.html
標籤:C語言
