看板 b99902HW 關於我們 聯絡資訊
※ 引述《realturner (rt)》之銘言: : 題目述敘有更新,請同學去查看 : 另外最後一筆測資因為檔案很多(~30000) : 如果用 strcpy 會因為空間不夠而無法執行 : 產生「使用到不該用的記憶體」的錯誤 : 其實只要記指標就好了 : 同樣地,用完一個檔記得就要關 : 因為系統會限制同時能開的檔案數 : 最後,如果你都做了,而且用了 qsort 還是超時的話 : 請多丟幾次,第二次通常會比較快 各位強者好 在下做這次的homework時碰上一個問題 雖然已經靠估狗解決 卻還是不知道為什麼會這樣 因此上來向各位請教 先說我是用 DEV C 我本來的compare函式長這樣: int compare(void *data1,void *data2) 在編譯的時候 出現如下的錯誤訊息: passing argument 4 of ‘qsort’ from incompatible pointer type 我為此百思不得其解 因為這和老師講義上面的形式明明一模一樣 後來辜狗了一下 看到一堆英文中 好像說要加const 於是我就把函式改成這個樣子: int compare(const void *data1,const void *data2) 然後就可以過了...... 但是我完全不知道為什麼要加...... 我把老師講義的程式複製到DEV C 他沒有加const也照樣可以編譯可以跑 但是我自己的就得加 請問那個錯誤訊息和const的關係到底是甚麼? 感謝各位大大~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 119.77.199.111
skyly:你可以 po 一下你的 compare function 嗎? 01/05 20:22
skyly:你也可以寄站內信給我 @@ 01/05 20:23
pp31630:我也是遇到同樣的問題耶!! 01/05 20:33
wctaiwan:+1,可以compile / 跑就是了 01/05 20:38
skyly:是說你們 compile 的時候要存成 .c 用 gcc compile 01/05 20:47
skyly:而不是存成 .cpp (Dev-C++ 預設) 然後用 g++ compile 01/05 20:47
skyly:理論上沒加 const 的話用 g++ (當然)不會過, 01/05 20:48
skyly:用 gcc 則是可以通過編譯 (不過會顯示 warning) 01/05 20:48
radar735:感謝強者解惑! 01/05 20:59
skyly:warning 的原因大家要注意到 qsort 的第四個參數 (也就是 01/05 21:05
skyly:argument 4) 是 int (*)(const void*, const void*) 01/05 21:05
skyly:而非 int (*)(void*, void*) 這樣子大家應該可以推論出為 01/05 21:06
skyly:什麼會有 warning 了. 01/05 21:07
pp31630:感謝強者!!終於懂了 01/05 22:37
bill8124:我自己的理解方式是:qsort不希望compare函式更動陣列內容 01/06 00:29
bill8124:取而代之,以回傳值告訴qsort是否要交換 01/06 00:30
bill8124:如有解讀錯誤請指正 01/06 00:31