我无法弄清楚如何做到这一点,我已经尝试了这个和一些变体,有些会编译并且看起来工作正常,但我会得到非常随机的段错误,它有一些东西可以用我宣布这些结构的方式来做。结构中的所有信息都是动态的。请告诉我正确的方法,谢谢。
#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;
}
答案 0 :(得分:1)
您的代码有多个问题:
这是主要问题:
RetS2
的功能定义是
struct struct2* RetS2(char* CopyMe)
这意味着它期望char*
作为其第一个参数。但是当你打电话给它时:
struct struct2* S2 = RetS2();
你不会传递论据。这会调用 Undefined Behavior 。 下面:
int* Array = (int*) malloc (sizeof (int) * 5);
您为5 int
分配内存。您使用数组的第一个元素并停止使用它。您还忘记了free
Array
已分配的内存{。}}。
malloc
(和家人)is not required的演员。free
malloc
S2
S1
和updated_at
内存。