我在看別人寫好的源代碼,因為讀的困難,想看看資料結構的具體資料,讓自己有點概念,但是卻在輸出時遇到問題。
我把源程式的部分代碼寫一下:
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熱心網友回復:
大哥,你的hmm是怎么定義的,定義個指標有分配空間嗎,vector你不往里面push_back資料,默認是沒有資料的,當然列印錯誤了。uj5u.com熱心網友回復:
hmm是一個結構體指標,myf=(hmm->dur)[0]這句話沒問題,如果是空的話,我覺得這句話就報錯了,但如果這句話,加上printf那句話就運行錯誤,我是覺得,既然myf可以被賦值,無論如何都有個值,而且myf是一個float變數,不知道為啥對myf來printf就不行uj5u.com熱心網友回復:
1樓說的有道理,應該是(hmm->dur)[0]這個資料有問題,可以除錯看看dur里是否有資料uj5u.com熱心網友回復:
完整代碼貼一下
uj5u.com熱心網友回復:
看了一下,這個確實為空,但我昨天讀取的確實判斷是否為NULL了,昨天的報錯是0x00000005,一個很小的地址,這可怎么讓我判斷啊?uj5u.com熱心網友回復:
這個我差不多找到問題了,就是讀取了不能讀取的空間,指標的值為NULL,這個NULL也就是0吧,但是昨天我在讀取其他指標之前確實判斷是否為NULL了,昨天報錯是0x00000005,這個地址也不能讀,如果說指標是否為NULL我還能判斷,這么小的值我怎么判斷能不能讀啊?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41202.html
標籤:C++ 語言
上一篇:C++繼承的問題,求教
