c - 为什么在 main 中打印 'x' 的值,而它可能在从 abc() 出来时已被释放?

标签 c pointers

在上述代码中,在函数abc()中将指针赋值给x后,它在abc()中打印出x的值,从abc()中出来后,指针不应该再指向x了,因为' x' 可能已被释放,它应该会导致悬空指针,但事实并非如此,它也会在 main 中打印 'x' 的值,如何?

#include <stdio.h>
void abc();
int* ptr = NULL;
void abc()
{ 
    int x = 10; 
    ptr = &x; 
    printf("in abc ptr: %d",*ptr);
    printf("\n");
} 
int main()
{
    abc();
    printf("in main ptr: %d",*ptr);
    return 0;
}

最佳答案

仅仅因为不允许您做某事并不意味着它不会奏效。 C 并不能确保你所做的一切都是有效的。该指针未指向有效变量,但它指向的内存可能碰巧仍然具有正确的模式,即 int 10。

在调用 abcprintf 行之间调用其他函数,尤其是使用局部变量的函数,可能会导致该值被覆盖。

现在,这段代码会导致 undefined behaviour .

关于c - 为什么在 main 中打印 'x' 的值,而它可能在从 abc() 出来时已被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531436/

相关文章:

c - 在结构中使用指针并在 C 中写入文件

将无符号整数转换为C中的字节数组

c++ - 尝试使用递归和指向指针的指针来反转链表,但 reversell 函数未给出预期的正确输出

c - C/C++中float*和float[n]有什么区别

c++ - 指针输出让我困惑

c - scanf 无限循环

C++内存分配错误

c - 如何读取这种格式的数据?

c++ - 从指针队列访问结构成员

c - 指针如何获取变量、数组、指针、结构的地址