我还不太清楚如何做到这一点,我已经尝试了这几个变种,其中一些可以编译,看起来还可以,但是我会得到非常随机的段错误,这与我声明这些错误的方式有关结构。结构中的所有信息都是动态的。请让我知道执行此操作的正确方法,谢谢。

#include <stdio.h>
#include <stdlib.h>


typedef struct
{
    char* s2string1;
    char* s2string2;
    int   s2int1;
} struct2;


typedef struct
{
    char*    s1string1;
    char*    s1string2;
    struct struct2* mystruct;
    int      int1;
} struct1;


struct struct2* RetS2(char* CopyMe)
{
    int* Array = (int*) malloc (sizeof (int) * 5);
    Array[0] = strlen (CopyMe);

    struct struct2* S2 = (struct struct2*) malloc ( sizeof (struct2) );

    S2->s2int1 = Array[0];

    return S2;

}


struct struct1* RetS1()
{
     struct struct1* S1 = (struct struct1*) malloc ( sizeof (struct1) );

     struct struct2* S2 = RetS2();

     S1->mystruct = S2;

     S1->int1 = S2->S2int1;


     return S1;
}

int main()
{

    struct struct1 Top = RetS1();

    if (Top->mystruct->s2int1 == 10)
        // do something

    return 0;
}

最佳答案

您的代码有多个问题:


这是主要问题:

RetS2的功能定义是

struct struct2* RetS2(char* CopyMe)


这意味着它期望char*作为其第一个参数。但是当您调用它时:

struct struct2* S2 = RetS2();


您不传递任何参数。这将调用未定义的行为。
这里:

int* Array = (int*) malloc (sizeof (int) * 5);


您为5个int分配内存。您使用数组的第一个元素,然后停止使用它。您还忘记了freeArray分配的内存。
C中malloc(和家族)is not required中的演员表。
您不会free mallocS2S1内存。

关于c - 结构内部的动态结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32933071/

10-11 04:25
查看更多