【C++】内存泄漏排查

前言

内存泄漏影响程序的稳定性运行,并且在程序运行过程中,并不会报错误,需要借助专用的内存泄露工具进行检测。
工具:CLion and AddressSanitizer

#include <iostream>
using namespace std;

int main() {
    char *c = new char[2];
    *c = '1';
    delete c;
    return 0;
}
CMakeLists.txt 添加参数 -fsanitize=addres


cmake_minimum_required(VERSION 3.17)
project(code)
set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address")
set(CMAKE_CXX_STANDARD 14)

add_executable(code main.cpp)
=================================================================
==3026==ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new [] vs operator delete) on 0x602000000010
    #0 0x7f19d988e025 in operator delete(void*, unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x111025)
    #1 0x561bc11fd2f3 in main /data/code/main.cpp:7
    #2 0x7f19d93cd0b2 in __libc_start_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
    #3 0x561bc11fd1cd in _start (/data/code/cmake-build-debug/code+0x11cd)

0x602000000010 is located 0 bytes inside of 2-byte region [0x602000000010,0x602000000012)
allocated by thread T0 here:
    #0 0x7f19d988cb47 in operator new[](unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10fb47)
    #1 0x561bc11fd29e in main /data/code/main.cpp:5
    #2 0x7f19d93cd0b2 in __libc_start_main (/usr/lib/x86_64-linux-gnu/libc.so.6+0x240b2)

SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x111025) in operator delete(void*, unsigned long)
==3026==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
==3026==ABORTING

高级用法

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RockWang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值