具有不同参数的相同主体的两个不同功能在相同存储器位置返回值

时间:2017-11-07 12:37:33

标签: c pointers

我无法理解这里发生的事情。

#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?

1 个答案:

答案 0 :(得分:1)

int *f(int x){
    int p;
    p=x;
    return &p;
}

在此函数(和g)中,您将返回局部变量的地址。当调用者使用此地址时,它是无效的,因为它指的是一个被销毁的变量(就像使用指向free动态内存的指针一样)。这会导致未定义的行为。