看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): VC++ 問題(Question): 使用fscanf讀取txt檔內的數值(double)並放入陣列 當fscanf執行到一定次數程式會崩潰 餵入的資料(Input): .txt檔 內容為單純數值用\t與\n分隔 Ex: 120.25 15687 0.568 4568 452.5 213.111 預期的正確結果(Expected Output): 讀入所有資料 錯誤結果(Wrong Output): windows已觸發XXX.exe之中斷點 http://imgur.com/Pf3qYvV 程式碼(Code):(請善用置底文網頁, 記得排版) for (i = 0; i < 8; i++) for (j = 0; j < 1024; j++) fscanf(f, "%lf", &matrix[i][j]; 補充說明(Supplement): buffer是沒問題的,用動態配置宣告 有另外直接寫入讀出測試過 fscanf的行為也正確 約執行8*900次是沒問題的,數值也正確 但大概在8*97X次時,就會發生不明的崩潰 不知道有沒有人遇過一樣的問題 或是有更好的讀法 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 27.243.75.56
azureblaze:matrix的大小是? 03/12 11:14
ShoPeter:為1024*8的大小 03/12 11:23
x000032001:如果scanf讀到EOF呢 03/12 12:05
ShoPeter:可是還沒有讀到EOF就會出現該錯誤了 03/12 12:38
pcyu16:動態宣告的部分打出來看一下 另外你那段code括號沒對稱.. 03/12 14:30
lc85301:我猜你的matrix是用靜態宣告,我遇過float陣列因為這樣 03/13 20:32
lc85301:所以資料出錯,改成malloc就OK了 03/13 20:33
上面的CODE是直接打的,漏括號了,原CODE沒漏 下面是我動態宣告的方式(原CODE是double) 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; 問題應該不是出現在BUFFER 我有用迴圈直接給值寫滿整個BUFFER,再讀出確認 是沒有問題的 ※ 編輯: ShoPeter 來自: 27.243.75.56 (03/14 14:06)
loveflames:為什麼不設中斷點去看? 03/14 14:39
loveflames:改成這樣試試 03/14 15:02
loveflames:int * index=(int *)(data+height); 03/14 15:03
loveflames:for (i = 0; i < height; i++, index += width) 03/14 15:03
loveflames: data[i] =index; 03/14 15:03
loveflames:如果這樣也不行,就得用debugger看底層運作了 03/14 15:05
dirkc:我有個疑問, sizeof(int*) 是 4 或 8 ? 03/14 21:56
dirkc:就是你跑的系統架構是32或64? 03/14 21:57
dirkc:如果只是要解決問題的話,既然用C++的new乾脆用container 03/14 21:59
dirkc:覺得記憶體宣告方式有點奇怪,可能問題還是出在這... 03/14 22:03
yvb:動態配置那段, 如果是 32位元電腦, 用 int 可能不會發現錯誤; 03/18 18:26
yvb:若是 double **data; 請驗證 (double *) data + height 和 03/18 18:27
yvb:(double *) (data + height) 的差別. 03/18 18:27