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 of
aq
之前有一个相应的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 of
aq
之前有一个相应的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时,可以为该结构中包含的指针分配空间。您不会让它们指向任何东西,也不会分配空间来包含它们将指向的东西。

您不会在struct
a
中为
b
分配空间。您已将“a”定义为保持指针,而不是结构。另外,我认为malloc
(sizeof(a*))
应该是
malloc(sizeof(a))


you
me
似乎不需要成为指针,只需要普通的int

您没有在struct
a
中为
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,因为