提问人:A_normal_guy 提问时间:3/8/2023 最后编辑:A_normal_guy 更新时间:3/8/2023 访问量:52
指针不允许自动变量在函数调用 [duplicate] 后被删除
Pointer don't lets auto variable to get deleted after the function call [duplicate]
问:
当我在函数指针中使用指针而不是引用运算符时,不允许在函数调用后删除自动变量。
我从这段代码中得到,因为它是一个自动变量,在函数调用后它被删除。Segmentation fault (core dumped)
int i=7;
#include<stdio.h>
int *func() {
int i = 7;
return &i;
}
int main(void) {
int *a;
a = func();
printf("%d", *(a));
return 1;
}
但是当我使用额外的指针而不是引用运算符时,我不会收到任何错误并获得 7 作为输出。为什么这个指针不允许删除变量 i?
#include<stdio.h>
int *func() {
int i = 7;
int *ip = &i;
return ip;
}
int main(void) {
int *a;
a = func();
printf("%d", *(a));
return 1;
}
答:
2赞
Vlad from Moscow
3/8/2023
#1
这两个程序都具有未定义的行为,因为在调用函数后,会尝试取消引用不指向现有对象的无效指针。func
评论
0赞
A_normal_guy
3/8/2023
第二个始终打印 7 并返回 1。
3赞
Vlad from Moscow
3/8/2023
@A_normal_guy 未定义的行为意味着任何事情都可能发生,即使是预期的结果。但无论如何,这样的程序是不正确的。
1赞
Gerhardh
3/8/2023
@A_normal_guy 1) 尝试在之前放置另一个函数调用,看看它是否更改。2) 禁止访问该地址。你甚至不知道这个价值。printf
0赞
Jabberwocky
3/8/2023
@A_normal_guy谷歌“C undefined behavior”
评论
i
&i
ip
i
gcc
printf("%d",*(a));
printf("%p", (void*)a);