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

Ubuntu 23.10下-fsanitize=address编译C++程序报错解决咨询

AddressSanitizer 异常问题的解决办法
  • 手动指定Shadow内存起始地址
    运行程序时通过环境变量指定ASAN的阴影内存地址,避开现有内存映射冲突:

    ASAN_OPTIONS=shadow_memory_address=0x7fff00000000 ./test
    

    可以通过cat /proc/self/maps查看当前系统内存布局,选择一段未被占用的连续地址段替换上述值,比如0x7fe000000000等。

  • 调整栈大小限制
    避免直接设置ulimit -s unlimited,改为设置一个较大的固定栈大小:

    ulimit -s 65536
    

    该值对应64MB栈空间,足以应对大多数场景,同时不会触发Shadow内存冲突。

  • 降级或更新内核
    Ubuntu 6.5.0-25内核存在与AddressSanitizer的兼容性问题,可尝试降级到更稳定的6.2系列内核:

    sudo apt install linux-image-6.2.0-39-generic linux-headers-6.2.0-39-generic
    

    安装完成后重启系统,在GRUB菜单中选择该内核启动。也可以等待官方推送内核更新修复该问题。

  • 更换编译器或更新组件
    尝试使用clang替代g编译,clang的ASAN实现可能与当前内核兼容性更好:

    clang++ test.cpp -std=c++23 -fsanitize=address -o test
    

    或者更新g++及ASAN相关库:

    sudo apt update && sudo apt upgrade gcc-13 libasan8
    
  • 检查系统内存资源
    AddressSanitizer需要约2倍于程序内存的额外空间,内存不足会导致随机错误。用free -h检查内存使用,若内存不足,可添加交换空间:

    sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:10:05