野(迷途)指针和内存泄漏

野指针

迷途指针定义:
如果内存已经释放,而指针还在引用原始内存,这样的指针就称为迷途指针。

使用迷途指针会造成一系列的问题:

  • 如果访问内存,则行为不可预期。
  • 如果内存不可访问,则是段错误。
  • 潜在的安全隐患。

导致这几类问题的情况可能如下:

  • 访问已释放的内存。
  • 返回的指针指向的是上次函数调用中的自动变量。(如函数中声明了一个数组)

大部分编译器都把块语句当作一个栈帧。块语句执行完后会出栈。

迷途指针的实例:

  1. 使用已被释放的内存
int *pi = (int *)malloc(sizeof(int));
*pi = 5;
free(pi);
*pi = 10; // 结果不可预期

内存泄漏

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

总结:
野指针指使用了已经被释放的指针。
内存泄漏指该被释放的指针没有被释放。

你可能感兴趣的:(野(迷途)指针和内存泄漏)