gpt4 book ai didi

c - 无法访问 C 中结构的值

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:41 25 4
gpt4 key购买 nike

我目前正在学习编写 C 代码,但我一直坚持在堆上创建结构。我有以下代码:

#include <stdio.h>

typedef struct{
int a;
int b;
} some_struct;

int main(int argc, char ** argv) {
printf("%i", sizeof(some_struct));
some_struct * p_struct = malloc(sizeof(some_struct));
p_struct->a = 600;
p_struct->b = 100;
return 0;
}

但是当执行时 Visual Studio 告诉我:

test.exe 中 0x00007FF6286C1E39 处的未处理异常:0xC0000005:访问冲突写入位置 0xFFFFFFFFAFBE4440。

调试器还告诉我无法读取 a 和 b 的内存。我明白这两个整数应该是未初始化的,但为什么他们的内存看起来不可读?

最佳答案

查看您的地址,问题似乎是缺少 malloc() 原型(prototype)。做:

#include <stdlib.h>

隐式 int 导致 malloc() 返回的值被截断(假设 64 位地址和 32 位整数)。因此,从而产生无效地址。

在 C99 之前的版本中,如果找不到函数的原型(prototype),编译器会隐式声明一个带有 int 的原型(prototype)。但这在 C99 之后不再有效。

关于c - 无法访问 C 中结构的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com