代码大致这样的
#include <stdio.h>
void fun2()
{
struct tt
{
int len;
char buf[];
};
struct tt t1;
strcpy(t1.buf, "123456...."); // 这里造成越界写
}
void fun1()
{
int i = 1;
fun2();
printf("i = %d\n", i); // 在开优化开 lto 的时候 i 的值会被 fun2 改变
}
我个人觉得这种情况应该是, 越界写改变栈的另外一个方向的内存啊, 不应该去改变上一层函数的变量啊. 还有为什么 valgrind 对这种情况一点都不吱声呢, 有什么工具能检查这种情况么?
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.