我还不太清楚如何做到这一点,我已经尝试了这几个变种,其中一些可以编译,看起来还可以,但是我会得到非常随机的段错误,这与我声明这些错误的方式有关结构。结构中的所有信息都是动态的。请让我知道执行此操作的正确方法,谢谢。
#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
分配内存。您使用数组的第一个元素,然后停止使用它。您还忘记了free
为Array
分配的内存。C中
malloc
(和家族)is not required中的演员表。您不会
free
malloc
和S2
的S1
内存。关于c - 结构内部的动态结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32933071/