我无法理解这里发生的事情。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int *f(int x){
int p;
p=x;
return &p;
}
int *g(int x){
int y;
y=x;
return &y;
}
int main(){
int *x,*y;
x=f(1000);
y=g(250);
*x = *x + 250;
printf("%d\n",*y);
return 0;
}
输出: - 500
为什么行“* x = * x + 250”改变“* y”值?为什么输出不是250?
答案 0 :(得分:1)
int *f(int x){
int p;
p=x;
return &p;
}
在此函数(和g
)中,您将返回局部变量的地址。当调用者使用此地址时,它是无效的,因为它指的是一个被销毁的变量(就像使用指向free
动态内存的指针一样)。这会导致未定义的行为。