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指针!
| 归档时间: |
|
| 查看次数: |
5394 次 |
| 最近记录: |