我想通过在堆上分配内存来创建一个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()的返回值,但您应该检查它是否返回NULL。
如果你的编译器没有生成任何警告,告诉它生成更多。对于gcc,您可以添加-Wall -Wextra。