#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プログラミングに非常に慣れていません。