[問題] 當 fread() 讀取的資料一多會發生執行錯誤

看板C_and_CPP作者 (小涼)時間10年前 (2013/12/02 13:45), 編輯推噓3(307)
留言10則, 8人參與, 最新討論串1/1
Dev c++ 一開始 有作 int num=10000*16*15; double *mat=malloc(num*sizeof(double)); fread(mat,sizeof(double)*10000*16*15,1,fptr); ok 後來資料變多 也用fseek() 指定讀取區段 int num=216000*16; double *mat=malloc(num*sizeof(double)); fseek(fptr,sizeof(double)*216000*16*1,0); fread(mat,sizeof(double)*216000*16,1,fptr); 還是不行 是讀取資料大 會讓run 過不了? (compiler 是過了) 請問 要如何知道可容許的資料長度? 或著還有其他我應該注意的地方 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.120.96

12/02 14:36, , 1F
run不過是怎樣情況?
12/02 14:36, 1F

12/02 15:28, , 2F
出現 "停止運作"
12/02 15:28, 2F

12/02 16:45, , 3F
216000*16*1*8≒27M 跟前一個 10000*16*15*8≒19M 差沒很多
12/02 16:45, 3F

12/02 16:46, , 4F
應該不會是資料量變大的問題...
12/02 16:46, 4F

12/02 18:15, , 5F
太大可能會有 size_t 範圍問題, 但是你應該不是這問題.
12/02 18:15, 5F

12/02 18:56, , 6F
我自己最近在讀取模型是直接用file mapping就是了(?)
12/02 18:56, 6F

12/03 10:58, , 7F
檢查回傳值
12/03 10:58, 7F

12/03 11:42, , 8F
SEEK_SET 不要自己展開成 0 啦
12/03 11:42, 8F

12/06 22:06, , 9F
fseek(fptr,sizeof(double)*num,SEEK_SET);
12/06 22:06, 9F

12/06 22:08, , 10F
fread(mat,sizeof(double),num,fptr);
12/06 22:08, 10F
文章代碼(AID): #1Id1wMey (C_and_CPP)