C语言 如何正确访问错置结构?



我想通过在堆上分配内存来创建一个struct实例,而不是作为堆栈上的变量。当我试图访问已分配内存的解引用指针的成员之一时,会抛出访问冲突异常。

我没有包含stdlib.h,只有stdio.h,这就是问题所在,但是代码被编译并且没有抛出错误。

下面是我的代码:
#include <stdio.h>
struct shell {
int num;
};
int main()
{
struct shell* p;
p = (struct shell*) malloc(sizeof(struct shell));
(*p).num = 2; //exception thrown
return 0;
}

起初我尝试了箭头操作符,但我切换到解引用来简化,但它仍然不起作用。我在网上看到了一些例子,它们看起来和我的代码非常相似,但它仍然不起作用。

因为您没有#include,编译器不得不猜测malloc()返回的是什么,它将猜测它返回的是int,在许多系统上是32位。Malloc()实际上返回一个指针,在许多系统上是64位。这可能是问题的原因。

(它也会猜测malloc()不带参数)

正如其他人在评论中提到的,您不需要强制转换malloc()的返回值,但您应该检查它是否返回NULL。

如果你的编译器没有生成任何警告,告诉它生成更多。对于gcc,您可以添加-Wall -Wextra。

相关内容

  • 没有找到相关文章

最新更新