使用valgrind检查内存越界

简介: 使用valgrind检查内存越界

下载

http://valgrind.org/downloads/current.html


解压

编译

./configure
make
sudo make install

测试

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    //char  array[32] = {0};
    char* buffer = NULL;
    buffer = (char*)malloc(32);
    //崩溃
    buffer[56] = 0;
    free(buffer);
    return 0;
}

编译运行


gcc -g test.c
valgrind --tool=memcheck --leak-check=full ./a.out

显示如下:


==13794== Memcheck, a memory error detector
==13794== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==13794== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==13794== Command: ./a.out
==13794== 
==13794== Invalid write of size 1
==13794==    at 0x400593: main (test.c:11)
==13794==  Address 0x5205078 is 24 bytes after a block of size 32 in arena "client"
==13794== 
==13794== 
==13794== HEAP SUMMARY:
==13794==     in use at exit: 0 bytes in 0 blocks
==13794==   total heap usage: 1 allocs, 1 frees, 32 bytes allocated
==13794== 
==13794== All heap blocks were freed -- no leaks are possible
==13794== 
==13794== For counts of detected and suppressed errors, rerun with: -v
==13794== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)


注意其中:


==13794== Invalid write of size 1
==13794==    at 0x400593: main (test.c:11)

实用性探讨

需要说明的是,对于类似char  array[32] = {0};,提示上就要差一些


==13772== Invalid read of size 1
==13772==    at 0x4E5B800: (below main) (libc-start.c:285)
==13772==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

具体情况,以后通过试用再做补充.

目录
相关文章
|
6月前
|
Rust 安全 编译器
Rust中的生命周期与借用检查器:内存安全的守护神
本文深入探讨了Rust编程语言中生命周期与借用检查器的概念及其工作原理。Rust通过这些机制,在编译时确保了内存安全,避免了数据竞争和悬挂指针等常见问题。我们将详细解释生命周期如何管理数据的存活期,以及借用检查器如何确保数据的独占或共享访问,从而在不牺牲性能的前提下,为开发者提供了强大的内存安全保障。
|
6月前
|
Linux
linux 常用内存检查命令
linux 常用内存检查命令
76 0
|
29天前
|
存储 安全 程序员
内存越界写入
【10月更文挑战第13天】
35 4
|
28天前
|
Rust 安全 Java
内存数组越界
【10月更文挑战第14天】
26 1
|
29天前
|
Java 编译器 C++
内存越界读取
【10月更文挑战第13天】
35 2
|
30天前
|
存储 容器
内存越界访问(Out-of-Bounds Access)
【10月更文挑战第12天】
140 2
|
3月前
|
缓存 Ubuntu Linux
在Linux中,如何检查系统的CPU和内存使用情况?
在Linux中,如何检查系统的CPU和内存使用情况?
|
4月前
|
存储 监控 安全
JVM内存问题之如何比较不同时间点的pmap输出以检查新增或变大的内存段
JVM内存问题之如何比较不同时间点的pmap输出以检查新增或变大的内存段
|
4月前
|
Java 运维
开发与运维内存问题之触发Full GC,类加载检查如何解决
开发与运维内存问题之触发Full GC,类加载检查如何解决
32 0
|
5月前
|
C++
内存泄漏检查工具下载(vld)
内存泄漏检查工具下载(vld)