我不明白悬空指针和内存泄漏之间的区别.这两个术语有什么关系?

c

推荐答案

A 100指向已释放的内存.不再分配存储.try 访问它可能会导致分段故障.

以悬空指针结束的常见方式:

char *func()
{
   char str[10];
   strcpy(str, "Hello!");
   return str; 
}
//returned pointer points to str which has gone out of scope. 

您返回的地址是一个局部变量,当控制返回给调用函数时,该地址将超出范围.(Undefined behaviour)

另一个常见的悬挂指针示例是在对存储器调用了explicitly FREE之后,通过指针访问存储器位置.

int *c = malloc(sizeof(int));
free(c);
*c = 3; //writing to freed location!

100是尚未释放的内存,现在无法访问(或释放),因为无法再访问它.(例如,一个指针,它是指向内存位置dynamically allocated(且未被释放)的唯一引用,该位置现在指向其他地方.)

void func(){
    char *ch = malloc(10);
}
//ch not valid outside, no way to access malloc-ed memory

Char ptr ch是一个局部变量,在函数末尾超出范围,泄漏动态分配的10 bytes.

C++相关问答推荐

这两个具有递归函数和静态变量的 C 程序谁有不同的输出?

如果两个数字是相同的 0,则在 C++ 和 Root 中设置 0 条件

为什么下面的循环展开会导致错误的结果?

为什么 memchr() 将 void 指针作为输入?

从两个 32 位定时器计数器读取 64 位定时器值时,正确的 ARM64(AArch64)数据内存屏障使用是什么?

使用整数存储许多布尔值是否值得?

如何编写结构变量的读取函数?

为什么`(char)~0`和`(unsigned char)~0`返回不同宽度的值?

C 或 C++ 是否保证数组 < 数组 + SIZE?

如果缺少 const char* 数组初始化逗号,则生成编译器警告

((void (*)())buf)(); 是什么意思?意思是?

程序是 32 位还是 64 位意味着什么?

C/C++ 中的 const 数组和静态 const 数组有什么区别

C语言中i++和(i)++的区别

编译 HTK 时出现“致命错误:bits/libc-header-start.h:没有这样的文件或目录”

为什么 (A+B) 的 FFT 与 FFT(A) + FFT(B) 不同?

使用模数的 C 加法

C 与 C++ 编译不兼容 - 未命名类型

在 POSIX 系统上 argc 可以为零吗?

编译器中的 8 位布尔值.对它们的操作效率低吗?