指针变量所指向的动态内存被free后未置为NULL的代码示例和改进方法
时间: 2024-02-15 13:03:02 浏览: 50
内存与指针实质与联系(free)
4星 · 用户满意度95%
指针变量所指向的动态内存在被 `free` 后,如果没有将指针变量置为 `NULL`,会导致悬空指针的出现,可能会引发一些不可预知的问题。下面是一个示例代码:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int));
*ptr = 10;
printf("%d\n", *ptr);
free(ptr); // 释放内存
// 没有将 ptr 置为 NULL
return 0;
}
```
为了解决这个问题,我们可以在 `free` 后立即将指针变量置为 `NULL`,这样可以避免悬空指针的出现。修改后的代码如下:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int*)malloc(sizeof(int));
*ptr = 10;
printf("%d\n", *ptr);
free(ptr); // 释放内存
ptr = NULL; // 将指针变量置为 NULL
return 0;
}
```
这样就能保证指针变量不会指向已经被释放的内存,避免了悬空指针的出现。
阅读全文