免费错误后使用?

use*_*466 0 c

int main(void) {
  int* p = (int*) malloc(sizeof(int));
  int* q = (int*) malloc(sizeof(int));
  *p = 10;
  *q = 20;
  p = q;
  printf(“%d %d”, *p, *q);
  free(p); 
  free(q);
}
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码包含use-after-free错误?在free(p)和free(q)之后没有更多的表达.显然我们不再使用它们了!

Ara*_*raK 14

你有两个问题.

首先,您要删除两次相同的堆变量:

  free(p); 
  free(q);
Run Code Online (Sandbox Code Playgroud)

其次,您有内存泄漏,因为创建的变量p不再可访问.


请注意,onebyone的评论非常重要.如果你改变了这条线:

p = q;
Run Code Online (Sandbox Code Playgroud)

成:

*p = *q;
Run Code Online (Sandbox Code Playgroud)

在您的代码中根本没有问题:) Hello指针!