【发布时间】:2011-01-11 23:56:30
【问题描述】:
我有一个 malloc() 结构,在使用它们之后,我想 free() 它,但是我的程序在这里冻结了。谁能告诉我,我做错了什么?
这是我的代码:
struct data
{
char *filename;
char *size;
};
//primarypcs is a long type variable
struct data *primary = (struct data *)malloc( primarypcs * sizeof( struct data ) );
memset( primary, 0, sizeof(struct data *) * primarypcs );
...
...
...
for ( i = 0; i < primarypcs; i++ )
{
free( primary[i].filename ); //<----my program freezes here
free( primary[i].size ); //<----or here
}
free( primary );
提前致谢!
坎皮
编辑:
我怎样才能正确地为文件名和大小分配内存?
编辑2:
抱歉,我赶时间,没有告诉你你需要的所有信息。让我现在做 :) 基本上,我想创建一个应用程序,它获取两个给定驱动器/文件夹的文件列表,然后比较它们。我认为(并且仍然这样做),最简单的方法是,当我将文件名及其大小存储在上述结构中时。所以我必须为文件名和大小动态分配内存(我认为这是他们所说的),也必须为结构分配内存。
【问题讨论】:
-
我没有看到你为
filename和size分配内存。 -
是的,您的代码中有一个错误:在 malloc 中您使用的 sizeof(struct data) 似乎是正确的,但在 memset 中您使用的 sizeof(struct data*) 是大小的一半。这意味着你只将一半的内存归零,当你试图释放它时,最后 1/2 的内存会倒掉。答案应该是免费的(主要的);仅此而已
-
如果这是 C++,你应该使用 new 和 delete。
-
@Xorlev :我已经在回答中提到了这一点。请参阅下面的答案。
-
您需要选择 C++ 或 C 作为语言。您的示例使用 C 语言,而不是 C++。