2012-04-18 60 views
-1

嗨我試圖從http://blog.firetree.net/2006/08/23/nasa-srtm-elevation-data/,使用代碼沒有成功,經過多次追逐我發現它失敗的地方,但不知道如何解決它,請幫助,這個一直在做我的頭大約6個小時。 這是失敗的行。數據是指向內存映射文件的空指針。Typecasting空指針unsigned short

unsigned short datum=((unsigned short*)data)[i]; 

我在使用gcc編譯器的OpenSuse。我在64位系統上。 在此先感謝。

+1

它以什麼方式失敗? – 2012-04-18 23:48:21

+1

實際上你不是將數據轉換爲'unsigned short',而是轉換成'unsigned short *'。 'unsigned short'是通過索引來獲得的。 – 2012-04-18 23:54:11

+0

除了需要一個更準確的錯誤描述:什麼是'我'和'數據'可訪問的內存多長時間 – Grizzly 2012-04-18 23:54:16

回答

1

如果你說它在那時崩潰,那麼我會想象你正在讀數組以外。但是將一個指向unsigned short的指針存儲爲unsigned short是很有意思的,至少可以這麼說嗎?

2

我想也許這是由內存對齊造成的。 在某些平臺指針值不能轉換爲某些類型。例如,一個平臺需要int *應該與4對齊,所以0x12345可以是void *或char *,但是如果將它分配給int *,則會發生崩潰。

您的具體情況, 您可以將空指針轉換爲unsigned char *,然後再轉換2個無符號的字符爲無符號短:

unsigned char a =((unsigned char*)data)[i]; 
unsigned char b =((unsigned char*)data)[i+1]; 
if (platform_is_little_endian()) { 
    unsigned short datatum = (b << sizeof(unsigned char)) | a; 
} 
else { 
    // platform is big endian 
    unsigned short datatum = (a << sizeof(unsigned char)) | b; 
} 
0

唐納德·鄧氏相結合的方法,並實現瞭解決程序正在陣列外讀取。對於其他潛在用戶,在查找num_rows num_cols的值時發生問題,因爲作者平方根函數不平方根。