int* a = (int*)malloc(5);
int* b = a;
free(b);
是否有内存泄漏?如果是这样,为什么会这样?
答案 0 :(得分:1)
这不会泄漏内存,您可以释放分配的内容,但a
和b
在free
之后无效,因此使用其中任何一个都是未定义的行为。
答案 1 :(得分:0)
不,这非常安全。 (虽然你不应该强制转换malloc()。强制转换是邪恶的,应该尽可能避免。malloc()返回void *,你永远不需要转换为不同的指针类型)
答案 2 :(得分:0)
在你的情况下,没有内存泄漏,但这些指针被称为悬空指针。
因为你是从内存中删除对象但指针仍然指向相同的内存位置。
{
int* a = (int*)malloc(5);
int* b = a;
free(b); // a and b dangling now
a = b = NULL; //reset pointers // a and b are no longer dangling
}