Сегодня я видел некоторый код, который я думаю, будет утечка памяти:Этот код будет утечкой памяти?
/* realloc example: rememb-o-matic */
#include <stdio.h> /* printf, scanf, puts */
#include <stdlib.h> /* realloc, free, exit, NULL */
int main()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++) printf ("%d ",numbers[n]);
free (numbers);
return 0;
}
Я думаю, что программа не может освободить всю память, на которую ссылается указатель numbers
перед назначением нового значения этого указателя. Программа освобождает память, которую numbers
указывает только на последнюю итерацию цикла.
Вы выделяете хранилище для одного массива и свободное хранилище для одного массива. Выглядит хорошо, кроме этого кода C, а не C++. – NathanOliver
'realloc' делает правильные вещи - если он выделяет новый блок, он освобождает старый. В C++ вы бы использовали 'std :: vector', который просто работает. –
О, я сожалею, что это C. Я понял, «он освобождает старый» :) спасибо –