为什么 64 位 ubuntu 中的 gcc 没有检测到以下数组溢出?

Why gcc in 64 bit ubuntu doesn't detect the following array overflow?

本文关键字:数组 溢出 检测 ubuntu 中的 gcc 为什么      更新时间:2023-10-16

我的代码是

#include <stdio.h>
#include <string.h>
int main()
{
    const char *a="123456789abcdef";
    char b[10];
    int i=0;
    while((b[i]=a[i])!='')
        ++i;
    printf("%s, %dn",b,strlen(b));
    return 0;
}

代码存在数组b的数组溢出,但是当我在我的系统(64位ubuntu 12.04 lts)中使用gcc(版本4.6.3)编译它时,它成功了。

程序输出为123456789abcdef, 15
返回0表示程序正常退出。

我不知道这是我的编译器的问题还是我的系统的问题,有没有人可以告诉我?附注:它似乎只出现在64位linux与gcc。这是臭虫吗?

在c语言中不检查数组访问。如果像这样溢出缓冲区,结果是未定义的行为。这是程序员的责任,而不是编译器的责任。

有一些工具可以帮助检查无效的内存访问。像Valgrind在运行时这样做,Clang的静态分析器在编译时检查。