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/