【发布时间】:2021-08-04 11:32:34
【问题描述】:
我有三个文件
struct.h struct.c main.c
struct.h 包含结构和一些函数的声明
struct.c 包含全局变量bglobal 的一个实例struct b 和使用bglobal 的函数实现。它包括 .h 文件
main.c 调用 struct.h 中声明的一些函数。它还包括 .h 文件
struct.h 包含两个结构体
struct a{
int *s
}
struct b{
struct a* arr
}
void init();
void more();
struct.c 文件
#include"struct.h"
struct b bglobal;
void init(){
bglobal.arr = malloc(sizeof(struct a)*5);
}
void more(){
*bglobal.arr[0].name = 'I';
}
main.c 文件
#include "main.h"
int main(){
init();
more();
}
我希望在分配给bglobal.arr 的程序内存结束时释放它。
使用 valgrind 它说一些字节仍然可以访问。
如何做到这一点?
【问题讨论】:
-
你试过
free(bglobal.arr)吗? -
在
init()中注册一个退出处理程序,在程序退出时释放分配的内存。或者提供一个 uninit() 函数,客户端代码可以调用自己来释放资源。 -
你可以从你的
init函数调用atexit。 -
虽然释放所有已分配的东西更干净,但通常只有 chronic 内存泄漏会导致问题。
标签: arrays c pointers struct memory-leaks