You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC 12.2.0与Clang 15.0.7是否有Sanitizer设置可检测堆分配未初始化内存?

检测堆分配未初始化内存的Sanitizer设置问题

未初始化内存的C/C++示例

C语言示例

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    double* p = malloc(100*sizeof(double));

    printf("%f\n", p[22]);

    free(p);
}

C++语言示例

#include <iostream>

int main() {
    double* p = new double[100];

    std::cout << p[22] << '\n';

    delete [] p;
}

测试结果

使用GCC 12.2.0和Clang 15.0.7测试,尝试多种-fsanitize选项均未检测到未初始化内存错误:

C程序测试

$ gcc -fsanitize=address,undefined uninit.c && ./a.out 
-0.000002
$ clang -fsanitize=address,undefined uninit.c && ./a.out 
-0.000002
$ clang -fsanitize=memory uninit.c && ./a.out 
0.000000

C++程序测试

$ g++ -fsanitize=address,undefined uninit.cpp && ./a.out 
-1.83255e-06
$ clang++ -fsanitize=address,undefined uninit.cpp && ./a.out 
-1.83255e-06
$ clang++ -fsanitize=memory uninit.cpp && ./a.out 
0

问题

上述结果中,Clang的表现尤其意外,因为其文档中的类似示例显示该类情况应能被检测到。请问是否存在可检测上述示例中堆分配未初始化内存使用的Sanitizer设置?

编辑补充

如评论中ssbssa指出,该问题在Clang 16中已修复。


内容的提问来源于stack exchange,提问作者MWB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:50:15