在上述代码中,在函数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。
在调用 abc
和 printf
行之间调用其他函数,尤其是使用局部变量的函数,可能会导致该值被覆盖。
现在,这段代码会导致 undefined behaviour .
关于c - 为什么在 main 中打印 'x' 的值,而它可能在从 abc() 出来时已被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531436/