容量翻倍的数组

动态数组装满时用 realloc 把容量翻倍。补全后装入 1 到 10,输出 最终容量/元素之和。 (本题用 gcc -std=c11 -O0 编译。)

开始练习 →

平时不崩的内存越界

场景:一段处理字符串的代码跑了很久都没出事,但代码审查的人坚持说里面有越界。空口无凭,得让工具把它指出来。 任务:用 AddressSanitizer 编译运行 ~/work/mem/buf.c,找出越界并修好,交付的 ~/work/mem

开始练习 →

用计数分配器堵住泄漏

场景:一个统计单词的程序从来不释放内存,遇到结束标记时还直接 return 了。程序短还看不出来,放进长期运行的服务就是隐患。 任务:修好 ~/work/leak/words.c:读到 END 停止读入并照常输出统计;程序结束前释放申请过的

开始练习 →

崩溃时的调用栈

程序在 gdb 里段错误停下后,想看崩溃时一层层的调用栈,用命令【0】。

开始练习 →

让 gdb 认得行号

想让 gdb 显示出错的源码文件和行号,编译时要加【0】。

开始练习 →

查不到就跳过

lookup 查不到商品时返回 NULL。补全循环:查不到的订单计入「未知」并跳过,其余累加价格,输出 合计/未知。 (本题用 gcc -std=c11 -O0 编译。)

开始练习 →

段错误崩在哪个函数

场景:一个处理记录的程序跑到一半,只留下一句 Segmentation fault。六个处理函数长得几乎一模一样,光看代码猜不出是哪一个。 任务:编译并运行 ~/work/crash/crash.c(数据在 data.txt),找出程序崩在

开始练习 →

遇到脏数据就段错误

场景:一个库存计价程序在干净数据上好好的,一遇到空行或者没登记的商品就段错误。 任务:用 gdb 找到崩溃的地方,修好 ~/work/inv/inv.c 并编译出 ~/work/inv/inv:空行跳过,查不到的商品、缺数量、数量不是正整数

开始练习 →

argv 的第 0 个

C 程序里 argv[0] 是【0】。

开始练习 →

打开文件失败时

fopen 打开文件失败时返回【0】。

开始练习 →