【发布时间】:2012-07-12 11:31:42
【问题描述】:
#include<stdio.h>
struct a
{
void *ptr;
unsigned long val;
};
void main()
{
unsigned char errno;
struct a *id;
id = malloc(sizeof(*id));
func2(id);
printf("After changing %d\n", id->val);
}
void func2(struct a *id)
{
unsigned char errno;
func(id,&errno);
}
void func(struct a *id,void *ptr)
{
memset(id, 0, sizeof(*id));
id->ptr = ptr;
if (sizeof(id->val) >= sizeof(id->ptr))
{
id->val = (unsigned long)id->ptr;
return;
}
}
当我在主函数中打印 id->val 时,它正在打印 -1075050593 .但我试图访问一个无效的地址。请解释。我对 c 编程很陌生。
【问题讨论】:
-
另外,您应该打开编译器警告消息。你会发现这段代码编译不干净。您应该先解决所有编译问题,然后再询问问题是否仍然无法按预期工作。
-
Pointer to local variable 的可能重复项
-
func2(&id);的 & 符号太多。并且 main() 应该返回 int。叹息。 -
请注意
errno在 C 上下文中具有固定含义。 -
您是否尝试在
func2()中打印errno的值。它可能被初始化为 0,然后在func()中将 0 分配给id->val。
标签: c memory malloc local-variables