C语言 指针不允许自动变量在函数调用后被删除[重复]

polhcujo  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(131)

此问题在此处已有答案

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;
}
k3fezbri

k3fezbri1#

这两个程序都有未定义的行为,因为在调用函数func之后,试图取消引用一个不指向现有对象的无效指针。

相关问题