gpt4 book ai didi

c - C 中的内存泄漏是什么?

转载 作者:行者123 更新时间:2023-12-02 09:33:18 25 4
gpt4 key购买 nike

我尝试解决 exercise 16 的额外学分.即使它编译正确,我也会出现内存泄漏。

现在我的想法是,如果根本不使用 malloc(),程序就不可能泄漏内存,但在这里它确实泄漏了,因为当我运行命令时:< br/>

valgrind --leak-check=full -v ./ex16-1

我得到了:

definitely lost: 21 bytes in 2 blocks
  • 即使我没有分配任何内存(假定我的源没有问题)是否也可能发生泄漏?
  • 此外,如果可能的话,我该如何释放那 block 内存?内存指向哪里?

full output of valgrind is available on Pastebin

还有 source code :

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>

struct Person {
char *name;
int age;
int height;
int weight;
};

struct Person Person_create(char *name, int age, int height, int weight) {
struct Person who;
who.name = strdup(name);
who.age = age;
who.height = height;
who.weight = weight;

return who;
}

void Person_print(struct Person who) {
printf("Name: %s\n", who.name);
printf("\tAge: %d\n", who.age);
printf("\tHeight: %d\n", who.height);
printf("\tWeight: %d\n", who.weight);
}

int main(int argc, char const *argv[]) {
struct Person joe = Person_create("Joe Alex", 32, 64, 140);
struct Person frank = Person_create("Frank Blank", 20, 72, 180);

Person_print(joe);
Person_print(frank);
return 0;
}

最佳答案

该程序演示了严重的内存泄漏。在许多系统上,它不会运行很远。

#include <memory.h>

int add (int a, int b)
{
char *hog = malloc (1024 * 1024 * 1024 * 50);
return a + b;
}
int main (void)
{
int sum = add (add (6, 8), add (3, 7));
return 0;
}

在您的程序中,它调用 strdup(),后者调用 malloc。当您处理完 strdup 的返回值后,它应该被释放。

关于c - C 中的内存泄漏是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com