【发布时间】:2013-09-17 20:16:32
【问题描述】:
我有一个带有两个指针和一个 int 变量的结构。出于某种原因,我在ptr->i=0; 行遇到了分段错误。这是为什么?我指的是内存中的某些东西,i 不是指针,所以它应该是合法的。谁能解释一下这是怎么回事?我确实为 struct 和两个 char 指针创建了内存。
struct A_ {
char *a;
char *b;
int i;
};
typdef struct A_ StructA;
然后在我的main() 我有以下内容:
StructA *ptr=malloc(sizeof(StructA));
ptr->a=malloc(sizeof(char));
ptr->b=malloc(sizeof(char));
ptr->i=0;
【问题讨论】:
-
因为
ptr没有引用您分配的内存。所以你的陈述是试图修改内存中的一些随机位置。您需要将ptr分配给A_类型的结构。 -
ptr未初始化。您正在调用 UB。所有的地狱都崩溃了。 -
如果人们要否决这个问题,请至少像上面的人一样发表评论。
-
问题的问题在于没有足够的代码来提供答案。用户在对另一个答案的评论中表示,他为该结构分配了内存,因此向我们展示更多代码可能会有用。
-
我们还需要多看一点。您的
main中还有其他内容吗?您应该向我们展示编译并导致错误的最小程序。您还在问题中写了typdef而不是typedef;我认为这只是一个错字,否则程序根本无法编译。