这是我的 example6_3.h 文件
#ifndef EXAMPLE6_3_H
#define EXAMPLE6_3_H
typedef struct __list_t list_t;
// Allocation function
list_t* list_malloc();
// Constructor and destructor functions
void list_init(list_t*);
void list_free(list_t*);
// Public behavior functions
int list_add(list_t*, const int);
int list_get(list_t*, const int, int*);
void list_clear(list_t*);
size_t list_size(list_t*);
void list_print(list_t*);
#endif
这是我的 example6_3.c 文件
#include "example6_3.h"
#define MAX_SIZE 10
typedef int bool_t;
typedef struct __list_t {
size_t size;
int* items;
}list_t;
bool_t __list_is_full(list_t* list) {
return (list->size == MAX_SIZE);
}
bool_t __check_index(list_t* list, const int index) {
return (index >= 0 && index <= list->size);
}
list_t* list_malloc() {
return (list_t*)malloc(sizeof(list_t));
}
void list_init(list_t* list) {
list->size = 0;
list->items = (int*)malloc(MAX_SIZE * sizeof(int));
}
void list_free(list_t* list) {
free(list->items);
}
int list_add(list_t* list, const int item) {
if(__list_is_full(list)) {
return -1;
}
list->items[list->size++] = item;
return 0;
}
int list_get(list_t* list, const int index, int* result) {
if (__check_index(list, index)) {
*result = list->items[index];
return 0;
}
return -1;
}
void list_clear(list_t* list) {
list->size = 0;
}
size_t list_size(list_t* list) {
return list->size;
}
void list_print(list_t* list) {
printf("[");
for (size_t i = 0; i<list->size; i++) {
printf("%d,", list->items[i]);
}
printf("]");
printf("\n");
}
这是我的 main.c 文件
#include "example6_3.h"
int reverse(list_t* source, list_t* dest) {
list_clear(dest);
for (size_t i = list_size(source)-1; i>=0; i--) {
int item;
if (list_get(source, i, &item)) {
return -1;
}
list_add(dest, item);
}
return 0;
}
int main(void) {
list_t* list1 = list_malloc();
list_t* list2 = list_malloc();
list_init(list1);
list_init(list2);
list_add(list1, 4);
list_add(list1, 6);
list_add(list1, 1);
list_add(list1, 5);
list_add(list2, 9);
reverse(list1, list2);
list_print(list1);
list_print(list2);
list_free(list1);
list_free(list2);
return 0;
}
看起来代码没有问题,也没有内存泄漏。为什么内存泄漏检查会报告内存泄漏?这个工具可靠吗?是因为我使用方式的原因吗?
各位高手,请帮我分析一下问题,以及如何防止报内存泄漏。
list_free()
释放列表的项目,但不释放列表。
那么
list_free(list1);
free(list1);
list_free(list2);
free(list2);