c - 当我初始化包含动态数组的结构时,如何避免 valgrind(或其他 memcheck 工具)误报?
问题描述
我想初始化一个包含动态数组的结构,我把所有这些东西都写在一个函数中。而且还有另外一个函数可以清理这个struct,理论上不会有内存泄漏。但是,当我使用 valgrind 运行程序时,它报告在 entry 或 init 函数时存在内存泄漏。
首先,我用 malloc 编写了这个 init 函数来为这个结构分配内存。它报告内存泄漏。
然后,我将 malloc 更改为 realloc(NULL, ...) 以避免这种误报,但我失败了。
我不知道 C 中实现此功能的标准方法是什么。
#include <stdlib.h>
typedef enum
{
RUN_SUCCESS,
/*Failure*/
RUN_FAILURE
} RunStat;
typedef struct
{
char *elements;
size_t top;
size_t size;
} Stack;
RunStat init_stack(Stack *stack)
{
stack->elements = (char *)realloc(NULL, 100 * sizeof(char));
stack->size = 100;
stack->top = 0;
return RUN_SUCCESS;
}
RunStat free_stack(Stack *stack)
{
free(stack->elements);
stack->elements = NULL;
stack->size = 0;
stack->top = 0;
return RUN_SUCCESS;
}
int main ()
{
Stack stack;
init_stack(&stack);
free_stack(&stack);
return EXIT_SUCCESS;
}
这里的每个内存都在我的控制之下,我想让这个结构初始化而没有任何内存泄漏警告。我想知道这样做的标准方法。
解决方案
推荐阅读
- javascript - Angular2 - ngModel - 具有循环值的连接模型
- python - Selenium + Python 期望特定的已找到元素
- phpstorm - 使用远程解释器在 PhpStorm 中设置 CodeSniffer 时出错
- php - esc_html__() 在空格字符上剪切字符串
- java - 如何使用下面提到的特定格式写入 csv 表
- apache-kafka - 从 Apache Storm Trident 记录 Kafka 分区和偏移量
- css - 悬停伪类在触摸屏设备上的行为如何
- c++ - 使用迭代器对 std::list 进行排序
- c# - 如何检查列表中具有唯一组合的多个属性,其中属性名称可作为单独的集合使用。[C#]
- azure - Azure IoTHub 函数 Cosmos DB (js)