【发布时间】:2019-05-12 04:00:18
【问题描述】:
在 C (ANSI) 程序中,我有一个结构定义为:
typedef struct Contacts {
char * name;
char * email;
char * phone;
struct Contacts *next;
} aContact;
aContact *paContact;
根据我要存储的数据长度,是否可以将内存分配为(选项1):
paContact = (struct Contacts *) malloc(sizeof (struct Contacts) +strlen(theName) + strlen(theEmail) + strlen(thePhone) + 3);
然后执行类似(伪代码)的操作:
paContact->name = paContact;
paContact->email = paContact + strlen(name) + 1;
paContact->phone = paContact->email + strlen(email) + 1;
或者我是否必须为每个成员单独分配内存(选项 2):
paContact->name = (char*) malloc(sizeof (char)*strlen(name) + 1);
paContact->email = (char*) malloc(sizeof (char)*strlen(email) + 1);
paContact->phone = (char*) malloc(sizeof (char)*strlen(phone) + 1);
如果选项 1 不可行,那么跟踪所有分配的内存块以便最终释放它们的正确方法是什么?
谢谢!
【问题讨论】:
-
选项 1 没问题。您可以避免内存碎片。选项2.也可以。但是您需要在释放结构之前释放 aContact 的每个字段。
-
选项 1 要求您将指针指向 结构内存,否则您将用数据覆盖指针本身。否则它可以工作。
-
@stensal 看来你在评论中回答了。请考虑做出回答,以便将问题从未回答的问题列表中排除。