此问题在此处已有答案:
error: function returns address of local variable(8个答案)
(9个答案)
3天前关闭。
当我在函数指针中使用指针而不是引用操作符时,不允许在函数调用后删除自动变量。
我从这段代码中得到了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;
}
1条答案
按热度按时间k3fezbri1#
这两个程序都有未定义的行为,因为在调用函数
func
之后,试图取消引用一个不指向现有对象的无效指针。