释放分配的指针

Free an assigned pointer

以下代码是否释放了为 x 分配的内存?

int main()
{
    char *x = (char*)calloc(100, sizeof(char));
    char *y = x;
    free(y);
}

原版问题有

int *y = x;
free(y);

即将 char 指针分配给 int 指针,然后在 int 指针上调用 free()free() 的签名是 void free(void *ptr); 所以不管 char * 还是 int *,内存都会被释放。

问题的编辑(和当前)版本有

char *y = x;
free(y);

这里,yx都指向同一个内存。这被称为指针别名。在调用 free() 时,该内存肯定会被释放。

然而,一个问题是,在free(y)之后,指针x悬空,即它指向的内存不再是有效。

请注意,没有必要也不建议将 calloc 的值转换为 return。

调用 calloc() 返回的内存被调用 free() 释放。

在影响 xy 的代码中。

是的,确实如此。

方法是 void free(void *ptr),然后当你创建 char* y = x 时,你有一个指针指向 y 指向的同一 space 内存。

这让你稍后可以用 free (y) 释放 space。

但是,您会放置 x = NULL,因为现在 x 没有自己的 space,尽管它有一个值。

有关免费阅读的更多信息here

当你这样做时

char *y = x;

你让 y 指向 x 指向的位置。由于 y 指向由 calloc

编辑的内存位置 return
free(y);

完全有效。作为 @haccks ,如果您使 y 指向另一个内存位置,这将不起作用,前提是该内存位置不是 return 由 malloc/[=15= 编辑的]/realloc.


在 C 中,你 should not cast the result of malloc/calloc/realloc。此外,检查 calloc 的 return 值以查看它是否成功也很好。 calloc 将 return NULL 失败。