以下代码是否释放了分配给的内存x?
int main()
{
char *x = (char*)calloc(100, sizeof(char));
char *y = x;
free(y);
}
Run Code Online (Sandbox Code Playgroud)
Spi*_*rix 18
是
当你这样做
char *y = x;
Run Code Online (Sandbox Code Playgroud)
你y指出指向的位置x.由于y指向返回的内存位置calloc,
free(y);
Run Code Online (Sandbox Code Playgroud)
完全有效.正如@haccks 评论的那样,如果你y指向另一个内存位置,如果malloc/ calloc/ 没有返回这个内存位置,这将不起作用realloc.
在C中,你不应该转换malloc/ calloc/ 的结果realloc.另外,检查返回值calloc是否成功是好的.calloc将NULL在失败时返回.
这个问题的原始版本有
int *y = x;
free(y);
Run Code Online (Sandbox Code Playgroud)
即分配char指针的int指针,然后调用free()的int指针.的签名free()是void free(void *ptr);这样不论char *对int *,内存将被释放.
该问题的编辑(和当前)版本具有
char *y = x;
free(y);
Run Code Online (Sandbox Code Playgroud)
在这里,无论是y和x指向相同的内存.这称为指针别名.在打电话给free()那个记忆肯定会被释放.
然而,问题在于free(y),指针x将悬空,即它指向的存储器不再有效.
注意,既没有必要也没有建议从中转换返回值calloc.