【发布时间】:2017-03-03 15:01:13
【问题描述】:
正如我的长标题所说:我试图在 c 中返回一个已动态分配的指针,我知道,我必须释放它,但我不知道如何自己,我的搜索表明它只能在 main 中被释放,但我不能让用户来释放 int。
我的代码现在看起来像这样,
int *toInt(BigInt *p)
{
int *integer = NULL;
integer = calloc(1, sizeof(int));
// do some stuff here to make integer become an int from a passed
// struct array of integers
return integer;
}
我尝试只创建一个临时变量并查看其整数,然后释放整数并返回临时变量,但这没有奏效。必须有一种方法可以在不释放 main 的情况下做到这一点?
【问题讨论】:
-
我不知道你搜索了什么,但你几乎可以在任何地方释放分配的内存,而不仅仅是在主目录中。
-
如果您将 maloc() / calloc() 的结果作为返回值传递,您通常无法知道调用者对该指针做了什么,因此您应该将其留给调用者释放它,如果它不再需要
-
为什么
main中不能是freed?如果有人拿着枪站在你身后,请眨眼。否则,您应该查阅一本关于指针和动态内存分配的好 C 书。我不明白你的问题是什么。 -
@Olaf 因为那是导致内存泄漏的糟糕设计?
-
@Lundin:我们没有看到完整的代码。很可能程序中只有两个函数:这个和
main,并且只有一个模块。除非我有完整的图片(或者至少是一张足够宽的图片),否则我会小心地称某些东西为“糟糕”。我们首先需要一个minimal reproducible example。 (哦,“不能”与“不应该”不一样)。
标签: c memory-leaks free