gpt4 book ai didi

c - 悬空指针和内存泄漏的区别

转载 作者:太空狗 更新时间:2023-10-29 16:15:48 28 4
gpt4 key购买 nike

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

最佳答案

A dangling pointer 指向已经释放的内存。不再分配存储空间。尝试访问它可能会导致段错误。

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

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

您正在返回一个地址,该地址是一个局部变量,当控制权返回给调用函数时,该地址将超出范围。 (未定义的行为)

另一个常见的悬挂指针示例是在内存上显式调用 free 之后通过指针访问内存位置。

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

A memory leak 是尚未释放的内存,现在无法访问(或释放),因为无法再访问它。 (例如,对内存位置的唯一引用的指针动态分配(并且未释放)现在指向其他地方。)

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

Char-ptr ch 是一个局部变量,在函数结束时超出范围,泄漏动态分配的 10 字节

关于c - 悬空指针和内存泄漏的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132798/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com