照出迭代器失效
场景:一个小程序跑了很久都没出过问题,直到换了一台机器、换了一批数据,它开始偶尔输出乱码。代码评审时有人说:这里有未定义行为。 任务:先用 AddressSanitizer 编译并运行 ~/work/ub/dup.cpp,看它报什么,再把问
崩溃栈顶是哪个函数
场景:一个库存程序处理一批命令时突然 Segmentation fault,除此之外什么都没说。 任务:在 ~/work/crash 里编译运行 crash.cpp(输入是 ops.txt),找出程序崩溃时正在执行的函数的全名(带命名空间)
按值传容器
函数参数写成 std::vector<std::string> v(按值传递),每调用一次都会【0】。
两种拼接
循环里 s = s + w; 比 s += w; 慢得多,是因为前者【0】。
数一数拷贝了多少字符
对每个词,s = s + w 要拷贝 当前长度 + 词长 个字符,s += w 只拷贝词长个。算出两种写法各拷贝多少字符,输出 前者/后者。 (本题用 g++ -std=c++17 -O0 编译。)
热循环里的整份拷贝
场景:一个客户统计程序在几百人时很快,八千人时要跑十来秒。代码只有二十行,看不出哪里有复杂的计算。 任务:找到 ~/work/perf/stats.cpp 热循环里白白浪费的那一步,让 8000 个客户在 2 秒内出结果,输出不变。用 g+
越拼越慢的字符串
场景:一个把单词用逗号接起来的小工具,几百个词瞬间完成,八万个词却卡了十几秒。 任务:改写 ~/work/join/join.cpp 的拼接方式,让 8 万个词在 2 秒内出结果,输出一字不变。用 g++ -std=c++17 -O2 编译
Makefile 的依赖行
Makefile 里写着 main.o: main.cpp inventory.h,它的意思是【0】。
make -q 返回零
在工程目录里运行 make -q inv,退出码是 0,说明【0】。
库存命令的核心逻辑
逐条处理命令:add 且数量 > 0 入库;take 且数量 > 0 时够就出库、不够记一次「不足」;其它都算无效。输出各物品库存(按名字、逗号隔开)以及 无效次数、不足次数。 (本题用 g++ -std=c++17 -O0 编