检查内存泄漏

Valgrind 是一个不可或缺的工具,它为 Linux 程序的内存泄漏检测和堆栈分析提供了强大的支持。


1.设计案例

定义一个结构体变量并初始化,放到堆上,不能内存泄漏。

#include <stdio.h>
#include <stdlib.h>//使用malloc函数

typedef struct student{
int id;
char *name;
}stu,*stup;

#define MAX 10

int main()
{
stup ptr = (stup)malloc(sizeof(stu)); // 分配内存,堆区

if (ptr == NULL) {
    printf("Memory allocation failed\n");
    return 1; // Exit if memory allocation fails
}

ptr->id = 1; // 设置学号,堆区
ptr->name = (char *)malloc(MAX * sizeof(char)); // 分配内存,堆区

if (ptr->name == NULL) {
    printf("Memory allocation for name failed\n");
    free(ptr); // Free previously allocated memory
    return 1; // Exit if memory allocation fails
}

ptr->name[0] = 'A'; // 设置姓名,堆区
ptr->name[1] = '\0'; // 设置字符串结束符
printf("ID: %d, Name: %s\n", ptr->id, ptr->name); // 输出学号和姓名

free(ptr->name); // 释放姓名的内存
//free(ptr); // 释放学号的内存
ptr = NULL; // 将指针置为NULL,防止悬空指针

printf("Memory freed successfully\n");
return 0;
}

2.检查内存泄漏情况

  1. vim storage.c (编写.c文件)

  2. 安装检测工具valgrind
    sudo apt install valgrind

  3. 检测内存泄露
    gcc storage.c -o storage
    valgrind ./storage
    可以输出申请、释放内存块数,精确计算丢失了多少内存。

  4. 观测是否注释free(ptr);的影响:
    内存正常释放:
    在这里插入图片描述内存泄露
    在这里插入图片描述


参考资料

  1. 利用 Valgrind 进行 Linux 程序内存泄漏与堆栈分析检测https://my.oschina.net/emacs_8822976/blog/17349289
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值