我在 C (linux(x86_64)) 中有这样的代码:
typedef struct
{
char k[32];
int v;
}ABC;
ABC states[6] = {0};
ABC* get_abc()
{
return &states[5];
}
在 main() 中:
int main()
{
ABC *p = get_abc();
.
.
.
printf("%d\n", p->v);
}
在访问 p->v 时,我在 printf 语句中遇到分段错误。我试图从 gdb 调试它,它说“无法访问内存”。这里有一件重要的事情是,当我编译这段代码时,gcc 会在ABC *p = get_abc();上向我发出警告。我正在尝试将指针从整数转换。我的问题是我从 get_abc() 返回结构的地址,那么为什么编译器会给我这样的警告?为什么编译器将其视为整数?我认为由于此警告,我遇到了分段错误,因为整数不能在 x86_64 中保存内存地址。
任何帮助,将不胜感激。