释放指定的指针

时间:2015-05-01 10:45:02

标签: c free

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

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

4 个答案:

答案 0 :(得分:18)

当你这样做时

char *y = x;

您将y指向x指向的位置。由于y指向calloc返回的内存位置,

free(y);

完全有效。如@haccks commented,如果您将y指向另一个内存位置,则此操作无效,前提是malloc / {{未返回此内存位置1}} / calloc

在C中,你是should not cast the result of malloc/calloc/realloc。此外,检查realloc的返回值以查看它是否成功是好的。 <{1}}将在失败时返回calloc

答案 1 :(得分:5)

问题的原始版本

int *y = x;
free(y);

即。将char指针分配给int指针,然后在free()指针上调用intfree()的签名为void free(void *ptr);,因此无论char *int *如何,都会释放内存。

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

char *y = x;
free(y);

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

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

注意,既没有必要也没有建议从calloc转换返回值。

答案 2 :(得分:1)

是的,确实如此。

该方法为void free(void *ptr),然后当您创建char* y = x时,您有一个指向y所指向的相同空间内存的指针。

这可以让您稍后使用free (y)释放该空间。

但是,你会放x = NULL,因为现在x没有自己的空间,尽管它有值。

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

答案 3 :(得分:0)

SaveAs来电所回复的内存已通过calloc()的通话释放。

在影响free()x的代码中。