struct中的动态结构

时间:2015-10-04 11:43:10

标签: c struct

我无法弄清楚如何做到这一点,我已经尝试了这个和一些变体,有些会编译并且看起来工作正常,但我会得到非常随机的段错误,它有一些东西可以用我宣布这些结构的方式来做。结构中的所有信息都是动态的。请告诉我正确的方法,谢谢。

#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;
}

1 个答案:

答案 0 :(得分:1)

您的代码有多个问题:

  1. 这是主要问题

    RetS2的功能定义是

    struct struct2* RetS2(char* CopyMe)
    

    这意味着它期望char*作为其第一个参数。但是当你打电话给它时:

    struct struct2* S2 = RetS2();
    
    你不会传递论据。这会调用 Undefined Behavior

  2. 下面:

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

    您为5 int分配内存。您使用数组的第一个元素并停止使用它。您还忘记了free Array已分配的内存{。}}。

  3. C中malloc(和家人)is not required的演员。
  4. 您不必free malloc S2 S1updated_at内存。