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

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

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

最佳答案

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

即使你的函数这样做了:

*a2->val = 19;

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

关于c - 局部变量的地址分配给结构体中的成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028171/

相关文章:

c# - 我无法用局部变量 C# 初始化内部结构

c - 一个宏中的多个语句

c - 什么时候让指针指向堆上和堆栈上的结构?

c - 为什么我的 char * 返回不同的值?

c++ - 代码arp数组、指针和内存分配的不可理解部分(Windows IP函数)

javascript - 在工厂类中实现继承,而无需在 Javascript 中复制代码

C函数返回错误值

c - 是否可以将链接器脚本符号地址作为 C 代码中的编译时间常量值?

c++ - 向后移动下一个节点函数

c - 警告 : assignment from incompatible pointer type [-Wincompatible-pointer-types] qt1. 函数 = &H1