我了解这个malloc / free组合的内存问题吗?

时间:2014-07-15 21:59:53

标签: c pointers memory memory-management malloc

我有一个看起来像这样的c函数

void fn(void *data) {

    type *p=malloc(sizeof *p);
    p=data;
     ...
    free(p);
}

如果我理解正确,那么这两个问题就是malloc p 留出了一些记忆,但 p 中的指针会立即生效指针数据覆盖,因此没有任何内容指向分配给 p 的内存。此外,后续的free实际上释放了数据的内存,因此任何名为 fn 的函数都将无法再安全地访问它。这是对的吗?

我可能打算做的是:

void fn(void *data) {

    type *p;
    p=data;
     ...
}

由于没有malloc没有free数据中的指针继续指向已分配的内存?

编辑:我应该指出,我确信数据中的指针实际上是与 p 相同类型的指针。

进一步编辑:数据中的指针指向其他地方的malloc<

2 个答案:

答案 0 :(得分:3)

是。你明白了。在将内存分配给data后将p分配给p将不会在malloc之前留下指向已分配内存的指针。
一个程序不再可访问的内存块被称为 garbage 。留下垃圾的程序有内存泄漏 不幸的是,与其他一些语言不同,C没有垃圾收集器

另一件事是调用free(p)将调用未定义的行为,因为free 的参数必须是以前由内存返回的指针分配函数(或者它可以是NULL指针)。

答案 1 :(得分:2)

是的,该函数不应释放它未分配的内存。在大多数情况下值得遵循的原则是:不要在不同的环境中分配和解除分配。