如何在c中修复此内存泄漏

时间:2016-07-12 22:18:10

标签: c memory-leaks

我必须创建一个函数来分配所需的所有内存,读入数据,并相应地创建链表。 在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;
}

1 个答案:

答案 0 :(得分:1)

当您实例化时,您只需要为A分配内存。

Order * A = (Order *)malloc(sizeof(Order));

(Order *)之前的malloc(...)是一个类型为Order *的强制转换,因为malloc返回void * type。

在你的while循环中,你将内存分配给A无限期(而A!= NULL),这就是你内存泄漏的原因。

提示(因为我认为这里不是解释它的正确位置):您应该阅读有关malloc()和free()函数的更多信息。你可能觉得它很有用,因为你可能还需要修改你Order **b的声明和/或重新思考你的算法部分(我没有测试它,抱歉x)。