c中结构的动态内存分配

时间:2014-04-04 04:45:28

标签: c memory-management malloc structure

代码:

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];

我怎样才能编写necesarry代码来动态分配内存来存储pFriend [2]中的值[>]> FullName-> Name.First?

3 个答案:

答案 0 :(得分:0)

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

// 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);

答案 1 :(得分:0)

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

//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));

答案 2 :(得分:0)

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];