繁体   English   中英

局部变量的地址分配给结构中的成员指针

[英]Address of local variable is assigned to member pointer in Structure

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

将局部变量分配给成员结构指针。 并最终使其为空。 而不是提供空指针,而是在尝试访问它时给出0。

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

即使您的函数做到了:

*a2->val = 19;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM