我在评估中遇到过这个问题,我需要找到错误并解释原因。
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;
}
答案 0 :(得分:1)
如果第二个malloc失败,则从函数返回并且不会从第一个malloc调用中释放内存。
if (!buffer2)
{
//free( buffer1 ) ;
return -1;
}
答案 1 :(得分:1)
在第二次调用malloc失败的情况下是内存泄漏:那么你不能在buffer1上调用free。第一行也是预处理器的错误指令,但是我们不知道这是故意的错误还是只是你的紧迫感。
答案 2 :(得分:1)
只有当buffer1
条件都通过时,您才能释放buffer2
和if
。如果第一个if
条件通过且第二个if
条件失败,该怎么办?在这种情况下会有内存泄漏。因此,请在第二个buffer1
语句中释放if
。