繁体   English   中英

c中struct的动态内存分配

[英]Dynamic memory allocation of struct in c

代码:

struct T_Name
{
   char *First;
   char *Middle;
   char *Last; 
};

struct T_FullName
{ 
   char *Title;
   struct T_Name Name; 
   char *Suffix;
};

struct T_Person
{ 
   struct T_FullName *FullName;
   int Age;
   char Sex;
   struct T_Person *BestFriend;
};

typedef struct T_Person *ptrPerson;

ptrPerson pFriend[10];

struct T_Person Person[10];

我如何编写必要的代码来动态分配内存来存储 pFriend[2]->FullName->Name.First 中的值?

假设您知道要存储的名字的长度,

// Allocate memory for FullName.
Person[2].FullName = malloc(sizeof(T_FullName);

// Allocate memory for the first name.
Person[2].FullName->Name.First = malloc(FIRSTNAME_LENGTH);

你的pFriend是一个指针变量,所以你必须先为指针变量分配内存。 然后再次分配内存后,您的FullName是指针类型,因此我们需要为其分配内存,最后,您在FullName 中Name成员不是指针类型,因此您可以使用First from Name. 运算符为其分配内存。

//Allocate space for T_Person
pFriend[2] = malloc(sizeof(T_Person);
//Allocate space for FullName
pFriend[2]->FullName = malloc(sizeof(T_FullName);
//Allocate space for First Name
pFriend[2]->FullName->Name.First = malloc(sizeof(urstringlength));
pFriend[2] = malloc( sizeof *pFriend[2] );
pFriend[2]->FullName = malloc( sizeof *pFriend[2]->FullName );
pFriend[2]->FullName->First = malloc( strlen(the_name) + 1 );
strcpy(pFriend[2]->FullName->First, the_name);

请注意,您可能实际上并不想这样做,使用这种混乱的结构会很困难。 您至少应该将未使用的指针设置为 NULL ,以便您的其他代码可以判断哪些指针指向已分配的内存,哪些不指向。

此外,在此示例中未使用Person 如果你想让pFriend[i]指向Person[i]你必须明确地说出来; 将我的第一行替换为:

pFriend[2] = &Person[2];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM