Pointers 在C中,将值添加到结构到指针分段错误
各位,我现在有个问题Pointers 在C中,将值添加到结构到指针分段错误,pointers,struct,segmentation-fault,Pointers,Struct,Segmentation Fault,各位,我现在有个问题 #include <stdio.h> #include <stdlib.h> typedef struct a { int *aa; int *bb; struct b *wakata; }a; typedef struct b { int *you; int *me; }b; int main() { a *aq; aq = (a*)malloc(sizeof(a*)); *aq->wakata->you = 1; *
#include <stdio.h>
#include <stdlib.h>
typedef struct a
{
int *aa;
int *bb;
struct b *wakata;
}a;
typedef struct b
{
int *you;
int *me;
}b;
int main()
{
a *aq;
aq = (a*)malloc(sizeof(a*));
*aq->wakata->you = 1;
*aq->wakata->me = 2;
free(aq);
return 0;
}
问题是,如何通过结构“a”将值设置为结构“b”内部的变量
有人吗?初始分配的
a
仅分配4个字节(在32位体系结构中)。应该是:
aq = (a*)malloc(sizeof(a));
wakata尚未初始化:可能是:
aq->wakata = (b*)malloc(sizeof(b));
而且它还需要在free ofaq
之前有一个相应的free
free(aq->wakata);
由于您有指向整数的指针,因此也需要分配这些指针(
you
和me
)。但不清楚这是否是你的目标。您可能应该从int声明中删除*
,使它们只是int
成员,而不是指向int的指针。初始分配a
仅分配4个字节(在32位体系结构中)。应该是:
aq = (a*)malloc(sizeof(a));
wakata尚未初始化:可能是:
aq->wakata = (b*)malloc(sizeof(b));
而且它还需要在free ofaq
之前有一个相应的free
free(aq->wakata);
由于您有指向整数的指针,因此也需要分配这些指针(
you
和me
)。但不清楚这是否是你的目标。您可能应该从int声明中删除*
,使它们只是int
成员,而不是指向int的指针。wakata
没有指向任何有效内存。你必须为它malloc内存,然后还要为wakata->You
和wakata->me
wakata
没有指向任何有效内存。您必须为它malloc内存,然后还要为wakata->You
和wakata->me
指针不包含数据。他们指向数据。这就是为什么它们被称为指针
当
malloc
有足够的空间来存储名为aq
的instance时,可以为该结构中包含的指针分配空间。您不会让它们指向任何东西,也不会分配空间来包含它们将指向的东西。指针不包含数据。他们指向数据。这就是为什么它们被称为指针
当malloc
有足够的空间来存储名为aq
的instance时,可以为该结构中包含的指针分配空间。您不会让它们指向任何东西,也不会分配空间来包含它们将指向的东西。您不会在structa
中为b
分配空间。您已将“a”定义为保持指针,而不是结构。另外,我认为malloc(sizeof(a*))
应该是malloc(sizeof(a))
you
和me
似乎不需要成为指针,只需要普通的int您没有在structa
中为b
分配空间。您已将“a”定义为保持指针,而不是结构。另外,我认为malloc(sizeof(a*))
应该是malloc(sizeof(a))
您
和我
似乎不需要成为指针,只需要普通的整数您的代码有一些问题
为结构a
分配内存时,应该执行以下操作
aq=(a*)malloc(sizeof(a))
现在,您为结构a
分配了内存,但没有为wakata
成员指向的结构b
分配内存,因此需要执行以下操作
aq->wakata=(b*)malloc(sizeof(b))
最后,在结构b
中不应该有int*
成员,而应该有int
成员。这样,您就能够正确地为它们赋值
请记住,您应该通过检查malloc
返回值是否不是NULL
检查内存的正确分配。您的代码有一些问题
为结构a
分配内存时,应该执行以下操作
aq=(a*)malloc(sizeof(a))
现在,您为结构a
分配了内存,但没有为wakata
成员指向的结构b
分配内存,因此需要执行以下操作
aq->wakata=(b*)malloc(sizeof(b))
最后,在结构b
中不应该有int*
成员,而应该有int
成员。这样,您就能够正确地为它们赋值
请记住,您应该通过检查malloc
返回值是否不是NULL
来检查内存分配是否正确。请参阅下面的代码。
总的来说,有几件事需要记住。在对内存进行malloc之前,无法访问内存。此外,内存和指针之间也存在差异,例如int和int*
#include <stdio.h>
#include <stdlib.h>
typedef struct a
{
int aa;
int bb;
struct b *wakata;
}a;
typedef struct b
{
int you;
int me;
}b;
int main()
{
a * aq = malloc(sizeof(a));
aq->wakata = malloc(sizeof(b))
aq->wakata->you = 1;
aq->wakata->me = 2;
free(aq->wakata)
free(aq);
return 0;
}
#包括
#包括
类型定义结构a
{
int aa;
int-bb;
结构b*wakata;
}a;
类型定义结构b
{
我爱你;
给我指点;
}b;
int main()
{
a*aq=malloc(sizeof(a));
aq->wakata=malloc(尺寸(b))
aq->wakata->you=1;
aq->wakata->me=2;
免费(aq->wakata)
免费(aq);
返回0;
}
看起来您这里有一些错误。请参阅下面的代码。
总的来说,有几件事需要记住。在对内存进行malloc之前,无法访问内存。此外,内存和指针之间也存在差异,例如int和int*
#include <stdio.h>
#include <stdlib.h>
typedef struct a
{
int aa;
int bb;
struct b *wakata;
}a;
typedef struct b
{
int you;
int me;
}b;
int main()
{
a * aq = malloc(sizeof(a));
aq->wakata = malloc(sizeof(b))
aq->wakata->you = 1;
aq->wakata->me = 2;
free(aq->wakata)
free(aq);
return 0;
}
#包括
#包括
类型定义结构a
{
int aa;
int-bb;
结构b*wakata;
}a;
类型定义结构b
{
我爱你;
给我指点;
}b;
int main()
{
a*aq=malloc(sizeof(a));
aq->wakata=malloc(尺寸(b))
aq->wakata->you=1;
aq->wakata->me=2;
免费(aq->wakata)
免费(aq);
返回0;
}
mm,仅仅因为a被定义为说明符,所以我们不需要在sizeof中放入(*),对吗?@capede:a*
表示“指向a的指针”,所以它是4个字节。在32位体系结构中,指定sizeof(a)
可能是12个字节。指向a
的指针的含义是什么,然后使其只有4个字节=1 int,因为