这个C代码中的错误是什么?为什么?

时间:2014-10-29 18:11:41

标签: c

我在评估中遇到过这个问题,我需要找到错误并解释原因。

int process(int, int*, int*); 

int example10(int in) 
{
    int *buffer1 = (int*)malloc(1000 * sizeof(int));
    if (!buffer1)
        return -1;

    int *buffer2 = (int*)malloc(2000 * sizeof(int));
    if (!buffer2)
        return -1;

    int retVal = process(in, buffer1, buffer2);

    free(buffer1);
    free(buffer2);

    return retVal;
}

3 个答案:

答案 0 :(得分:1)

如果第二个malloc失败,则从函数返回并且不会从第一个malloc调用中释放内存。

if (!buffer2)
{
    //free( buffer1 ) ;
    return -1;
}

答案 1 :(得分:1)

在第二次调用malloc失败的情况下是内存泄漏:那么你不能在buffer1上调用free。第一行也是预处理器的错误指令,但是我们不知道这是故意的错误还是只是你的紧迫感。

答案 2 :(得分:1)

只有当buffer1条件都通过时,您才能释放buffer2if。如果第一个if条件通过且第二个if条件失败,该怎么办?在这种情况下会有内存泄漏。因此,请在第二个buffer1语句中释放if