【发布时间】:2021-03-23 10:22:47
【问题描述】:
#include <stdio.h>
typedef struct {
int x,y;
} point;
point* create_point(int x,int y) {
point p={x,y};
point* ptr = &p;
return ptr;
}
int main() {
point* p1 = create_point(1,2);
point* p2 = create_point(6,7);
printf("%d, %d, ", p1->x, p1->y);
printf("%d, %d \n", p2->x, p2->y);
return 0;
}
当我使用 repl.it 编译时,我得到 6,7,0,0 作为输出,但是当我使用 sublime 文本编辑器运行相同的程序时,我得到不同的输出:6,7,6,7。有谁知道为什么?哪个输出是正确的输出?任何帮助表示赞赏,谢谢。
【问题讨论】:
-
为什么会得到输出?任何地方都没有
printf()。 -
p1 = &p;是无用的语句,因为p1是函数范围内的指针。参考“传值”。 -
嗯,你正在设置(并返回)
ptr到自动变量的地址(p),当函数返回时,它将超出范围,所以这是 UB。跨度> -
考试明确表示:不允许在线发布问题寻求解决方案
标签: c debugging output repl.it