Re: [問題] fscanf讀txt檔大量數值錯誤問題
原來的作法是:
int **data;
data = (int**)new char [height * sizeof(int *) + width * height * sizeof(int)];
for (i = 0; i < height; i++)
data[i] = (int *)data + height + i * width;
其中這一行 data[i] = (int *)data + height + i * width;
在64位元的電腦應該會造成記憶體出問題,假設sizeof(int)是4而sizeof(int*)是8,
(int*)data+1和(int*)(data+1)是不一樣的。
前者加sizeof(int)後者加sizeof(int*) ,因為data是int**。
所以可以考慮改成:
data[i] = (int*)data + height*(sizeof(int*)/sizeof(int)) + i * width;
另一種作法,利用sizeof(char)是一個byte:
ddata[i] = (int*)((char*)(data + height) + i * width * sizeof(int));
總而言之,記憶體爬格子是個需要小心的工作...
越來越多電腦買來的時候就是裝64位元的,所以這類的狀況應該滿容易碰到。
另外一件事就是,記憶體配置錯誤還是可能寫值進去,而且電腦沒報錯。
可能的原因包括測試的迴圈被最佳化忽略掉,或者剛好被覆寫的記憶體沒被使用等。
這些只是根據原PO提供的資訊所作的猜測,如果code原本已經是正確寫法,
或者確定coding的環境沒有這個問題,那可以直接忽略我這一篇。
--
謝謝uranusjr提供的highlighter
http://bbshighlighter.uranusjr.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.181.204
推
03/18 18:37, , 1F
03/18 18:37, 1F
→
03/18 18:38, , 2F
03/18 18:38, 2F
→
03/18 21:36, , 3F
03/18 21:36, 3F
→
03/18 21:38, , 4F
03/18 21:38, 4F
→
03/18 21:38, , 5F
03/18 21:38, 5F
→
03/18 22:08, , 6F
03/18 22:08, 6F
→
03/18 22:08, , 7F
03/18 22:08, 7F
→
03/18 22:29, , 8F
03/18 22:29, 8F
推
03/19 12:44, , 9F
03/19 12:44, 9F
→
03/19 12:45, , 10F
03/19 12:45, 10F
→
03/19 12:45, , 11F
03/19 12:45, 11F
→
03/19 12:45, , 12F
03/19 12:45, 12F
→
03/19 12:46, , 13F
03/19 12:46, 13F
→
03/19 12:46, , 14F
03/19 12:46, 14F
→
03/19 12:46, , 15F
03/19 12:46, 15F
→
03/19 12:47, , 16F
03/19 12:47, 16F
→
03/19 12:47, , 17F
03/19 12:47, 17F
→
03/19 12:48, , 18F
03/19 12:48, 18F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):