什么时候malloc内存为指针返回的结构?

时间:2011-02-08 15:36:33

标签: c pointers malloc

我正在完成一项任务,我的教授为我们提供了我们应该使用的所有功能原型,以及结构定义。

该程序的目的是读取.vcf(vCard)文件。

我们有一个函数readVcFile,它调用readVcard,它调用相应的函数来读取每一行并解析它。

以下是我的问题的相关函数原型:

VcStatus readVcFile( FILE *const vcf, VcFile *const filep );
VcStatus readVcard( FILE *const vcf, Vcard **const cardp );
VcStatus getUnfolded( FILE *const vcf, char **const buff );

我无法搞清楚是什么时候分配内存。 据我所知,大多数指针都应该是一种返回值的方法。 例如,我已经想出了getUnfolded,它将指针指向字符串,并使用该指针用字符串填充字符串。

我遇到更多麻烦的地方是readVcard。

请记住,readVcFile调用readVcard,并且vcf文件中可能有多个vcards,因此它可能会调用一次以上。现在我的问题是,何时(以及如何)我应该使用vCard。在我打电话给readVcard之前我是malloc吗?我在readVcard后如何访问该vcard?

这一切都非常令人困惑,所以我感谢任何为我澄清事情的尝试。

感谢。

编辑:如果有帮助,vcards的大小可能会有所不同,所以我需要使用malloc。

1 个答案:

答案 0 :(得分:2)

(我假设您的任务是使用这些功能,而不是写出来。如果我错了,请澄清您的问题。)

请注意,在readVCard()的{​​{1}}参数之前有两个星号。这意味着调用者提供了指向的指针,这是另一种告诉cardp它应该提供指向结果readVcard()的指针并将其分配给任何内容的方法。调用者提供的指针。当函数分配内存并且调用者负责释放它时,通常会使用此技术:

Vcard

教授应该提供有关函数应该如何表现的文档,并且应该有一些内容可以将“Vcard *card; VcStatus status = readVcard(file, &card); /* card now points at a newly-allocated Vcard */ if ( status == WHATEVER_THE_VALUE_IS_FOR_SUCCESS ) { /* ... Do something with the card ... */ free(card); } 集合到指向内存的指针,以便保存结果{{1}如果读取成功,则结构。“如果缺少这些信息,请发回作业并请求更完整的文档。 (如果是CS教授,那么草率练习会有两个缺点!)