作者radar735 (雷◎*◎+◎达)
看板b99902HW
标题Re: [课程] 单班计程作业 15
时间Wed Jan 5 20:19:15 2011
※ 引述《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
1F:推 skyly:你可以 po 一下你的 compare function 吗? 01/05 20:22
2F:→ skyly:你也可以寄站内信给我 @@ 01/05 20:23
3F:推 pp31630:我也是遇到同样的问题耶!! 01/05 20:33
4F:推 wctaiwan:+1,可以compile / 跑就是了 01/05 20:38
5F:推 skyly:是说你们 compile 的时候要存成 .c 用 gcc compile 01/05 20:47
6F:→ skyly:而不是存成 .cpp (Dev-C++ 预设) 然後用 g++ compile 01/05 20:47
7F:→ skyly:理论上没加 const 的话用 g++ (当然)不会过, 01/05 20:48
8F:→ skyly:用 gcc 则是可以通过编译 (不过会显示 warning) 01/05 20:48
9F:→ radar735:感谢强者解惑! 01/05 20:59
10F:推 skyly:warning 的原因大家要注意到 qsort 的第四个参数 (也就是 01/05 21:05
11F:→ skyly:argument 4) 是 int (*)(const void*, const void*) 01/05 21:05
12F:→ skyly:而非 int (*)(void*, void*) 这样子大家应该可以推论出为 01/05 21:06
13F:→ skyly:什麽会有 warning 了. 01/05 21:07
14F:推 pp31630:感谢强者!!终於懂了 01/05 22:37
15F:推 bill8124:我自己的理解方式是:qsort不希望compare函式更动阵列内容 01/06 00:29
16F:→ bill8124:取而代之,以回传值告诉qsort是否要交换 01/06 00:30
17F:→ bill8124:如有解读错误请指正 01/06 00:31