此特定代码是否包含内存泄漏?

时间:2018-01-22 01:28:49

标签: c pointers memory-leaks

int* a = (int*)malloc(5);
int* b = a;
free(b);

是否有内存泄漏?如果是这样,为什么会这样?

3 个答案:

答案 0 :(得分:1)

这不会泄漏内存,您可以释放分配的内容,但abfree之后无效,因此使用其中任何一个都是未定义的行为。

答案 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
}