局部变量的地址被分配给Structure中的成员指针

时间:2012-06-14 06:59:56

标签: c pointers structure local-variables variable-address

struct a {
    int *val;
};

void main(){
    int n;
    struct a *a1;
    a1= malloc(sizeof(a1));

    n=10;

    a1->val = &n;

    func(a1);


    printf("After changing %d\n",a1->val);

}

void func(struct a *a2){
    int a = 5;
    a2->val = &a;
    a2->val = 0 ;
}

将局部变量分配给成员结构指针。最后使其为null。而不是给出空指针,当它试图访问它时,它给出0。

1 个答案:

答案 0 :(得分:0)

由于a1->val指向无效地址(19很少是有效地址),因此您正在调用未定义的行为,并且任何结果都是可接受的(包括核心转储或其他崩溃)。

即使你的功能确实如此:

*a2->val = 19;

指针将指向一个在函数返回时不再有效的整数。一旦函数终止,取消引用指针就不再安全了;你可以安全地为它分配一个新的指针值;你可以比较指向另一个指针或NULL(受某些约束);但这就是全部。