kishore kumar mishra Ответов: 2

Есть ли какие-либо проблемы в приведенном ниже коде?


int foo(int in) 
{
  int *buf1 = (int *)malloc(1000*sizeof(int));
  if(!buf1) return -1;
  int *buf2 = (int *)malloc(2000*sizeof(int));
  if(!buf2) return -1;

  int retVal = process(in,buf1,buf2);

  free(buf1);
  free(buf2);

  return retVal;
}


Что я уже пробовал:

Я не могу найти никаких ошибок, пожалуйста, предложите, если они есть?

2 Ответов

Рейтинг:
2

Lukasz Gwizdz (Member 2097797)

На первый взгляд, существует потенциальная утечка памяти. Когда buf2 распределение терпит неудачу вы не заботитесь о предыдущем (buf1) и вы сразу же возвращаетесь из функции, не освобождаясь buf1 Вы должны позаботиться о том, чтобы buf1.

Напр..:

if (!buf2) {
    free(buf1);

    return -1;
}


Рейтинг:
0

CPallini

Код почти в порядке: у вас есть утечка памяти, если malloc не для buf2 (в таком случае buf1 память не освобождается).