[問題] Run-Time Check Failure #2

看板C_and_CPP作者 (= =)時間11年前 (2013/01/29 12:33), 編輯推噓1(1017)
留言18則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 如程式碼中,我從兩個txt檔中讀取99筆x座標與y座標 要找出點與點之間間距小於300的資料 若我的矩陣用pointer new宣告可正確執行無誤 但若用float x_cord[99],y_cord[99];宣告 則在程式運行後得到以後下錯誤 Run-Time Check Failure #2 - Stack around the variable 'y_cord' was corrupted. 百思不得其解希望版上高手能解答 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/WZpZcU -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 50.20.128.226 ※ 編輯: abcsimps 來自: 50.20.128.226 (01/29 12:33)

01/29 12:41, , 1F
檢查陣列使用是否有越界 (譬如說讀檔的count有沒有超過)
01/29 12:41, 1F

01/29 13:23, , 2F
feof(pfile)
01/29 13:23, 2F
應該是沒有越界 我是用這四行交替測試 //float x_cord[99]; //float y_cord[99]; float *x_cord=new float[99]; float *y_cord=new float[99]; 在程式結束後出現error的 我的output也都有正確輸出 所以很匪夷所思@@ ※ 編輯: abcsimps 來自: 98.207.233.179 (01/29 16:18)

01/29 16:25, , 3F
你可以檢查 fscanf_s 的回傳值,看有否在沒讀到的情況下
01/29 16:25, 3F

01/29 16:26, , 4F
仍然把值丟入陣列裡。
01/29 16:26, 4F

01/29 16:28, , 5F
假使檔案結尾有一個以上的換行字元,就會出錯。
01/29 16:28, 5F

01/29 16:30, , 6F
謝謝樓上 我明天上班檢查看看
01/29 16:30, 6F

01/29 16:35, , 7F
二樓告訴你答案啦 查查feof的描述就會發現你多讀了一次
01/29 16:35, 7F

01/29 18:13, , 8F
你試試 int x[10]; 與 int *x = new int[10]; 後
01/29 18:13, 8F

01/29 18:13, , 9F
故意寫個 x[10] = 50; 兩種都越界但只有一種會跳錯誤
01/29 18:13, 9F

01/29 18:14, , 10F
這個錯誤本來就只會在stack越界冒出來,new不會跳並不代
01/29 18:14, 10F

01/29 18:14, , 11F
表它沒有越界...
01/29 18:14, 11F

01/30 02:11, , 12F
feof() 當迴圈條件八成就是寫錯, feof() 是用來確認
01/30 02:11, 12F

01/30 02:14, , 13F
"有沒有讀到檔尾" 不是拿來確認 "是不是跑到檔尾"
01/30 02:14, 13F

01/30 02:16, , 14F
google "feof misuse" 結果就很清楚啦
01/30 02:16, 14F

01/30 02:20, , 15F
用 "有沒有讀進檔尾" 這樣比較好做區隔
01/30 02:20, 15F

01/30 02:58, , 16F
原來如此我懂了!!! 感謝各位的說明
01/30 02:58, 16F

01/30 03:06, , 17F
改成while(fscanf_s(pfile,"%f",&Value)!=EOF)
01/30 03:06, 17F

01/30 03:06, , 18F
就沒有問題了!
01/30 03:06, 18F
文章代碼(AID): #1H1r4Tlc (C_and_CPP)