释放分配的指针
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);
这里,y
和x
都指向同一个内存。这被称为指针别名。在调用 free()
时,该内存肯定会被释放。
然而,一个问题是,在free(y)
之后,指针x
会悬空,即它指向的内存不再是有效。
请注意,没有必要也不建议将 calloc
的值转换为 return。
调用 calloc()
返回的内存被调用 free()
释放。
在影响 x
和 y
的代码中。
是的,确实如此。
方法是 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
失败。
以下代码是否释放了为 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);
这里,y
和x
都指向同一个内存。这被称为指针别名。在调用 free()
时,该内存肯定会被释放。
然而,一个问题是,在free(y)
之后,指针x
会悬空,即它指向的内存不再是有效。
请注意,没有必要也不建议将 calloc
的值转换为 return。
调用 calloc()
返回的内存被调用 free()
释放。
在影响 x
和 y
的代码中。
是的,确实如此。
方法是 void free(void *ptr)
,然后当你创建 char* y = x
时,你有一个指针指向 y
指向的同一 space 内存。
这让你稍后可以用 free (y)
释放 space。
但是,您会放置 x = NULL
,因为现在 x
没有自己的 space,尽管它有一个值。
有关免费阅读的更多信息here。
是
当你这样做时
char *y = x;
你让 y
指向 x
指向的位置。由于 y
指向由 calloc
、
free(y);
完全有效。作为 @haccks y
指向另一个内存位置,这将不起作用,前提是该内存位置不是 return 由 malloc
/[=15= 编辑的]/realloc
.
在 C 中,你 should not cast the result of malloc
/calloc
/realloc
。此外,检查 calloc
的 return 值以查看它是否成功也很好。 calloc
将 return NULL
失败。