我必须创建一个函数来分配所需的所有内存,读入数据,并相应地创建链表。 在A = malloc(sizeof(Order))发生内存泄漏;它运作良好,但给我一个内存泄漏。有人可以帮忙吗?
typedef struct o_
{
int ID; //the order number
int daysInQueue; //the number of days old the order is
struct o_* nextOrder; //to the next order in the list
} Order;
Order** importLists(char* filename)
{
FILE *fptr = fopen(filename,"r");
Order ** b = malloc(sizeof(Order*)*4);
int i;
for ( i=0; i< 4; i++)
{
b[i]=NULL;
}
Order* A;
while (A != NULL)
{
A = malloc(sizeof(Order));
fscanf(fptr,"%d%d%d", &A ->ID, &A -> daysInQueue, &i );
if (feof(fptr))
{
break;
}
A-> nextOrder = b[i];
b[i]=A;
}
fclose(fptr);
return b;
}
答案 0 :(得分:1)
当您实例化时,您只需要为A分配内存。
Order * A = (Order *)malloc(sizeof(Order));
(Order *)
之前的malloc(...)
是一个类型为Order *的强制转换,因为malloc返回void * type。
在你的while
循环中,你将内存分配给A无限期(而A!= NULL),这就是你内存泄漏的原因。
提示(因为我认为这里不是解释它的正确位置):您应该阅读有关malloc()和free()函数的更多信息。你可能觉得它很有用,因为你可能还需要修改你Order **b
的声明和/或重新思考你的算法部分(我没有测试它,抱歉x)。