下面是我的c程序给我分段错误,我不知道为什么。 sizeof(struct node1 *)给出答案4,sizeof(struct node1)给出12。请解释一下。
#include<stdio.h>
#include<malloc.h>
struct node{
int i;
int j;
};
struct node1{
int *a;
int *b;
struct node *n;
};
int main()
{
struct node1 *nn;
nn=(struct node1 *)malloc(sizeof(struct node1));
nn->n->i=5;
printf("\nsize is %d -- %p -- %p %d\n",sizeof (struct node1*),*nn,nn,nn->n->i);
return 0;
}
答案 0 :(得分:2)
您是段错误,因为未分配'node1'结构的'n'成员。 在第一次分配后在nn-&gt; n上使用malloc。
struct node1 *nn;
nn=(struct node1 *)malloc(sizeof(struct node1));
nn->n = malloc(sizeof(struct node));
//now nn->n is allocated you can set a value in nn->n->i
nn->n->i=5;
不要忘记“返回0”之前的免费通话
free(nn->n);
free(nn);
return 0;