Будет ли утечка памяти, если выполнить этот код?
Все никак не могу понять будет-ли в данном коде утечка памяти или нет? Собственно, я в методе pushBack() создаю новый массив большего размера что бы скопировать в него значения массива который передаю в функцию и добавить новое. Далее я удаляю данные на которые указывает arr, и присваиваю ему адрес midArr который указывает на новый массив, после вывожу результат с помощью метода showArr() и снова удаляю данные на которые указывает *arr (но уже в main()). Так вот как я понимаю после всей этой чистки памяти в роди должен остаться указатель midArr, или он удаляется из стека после завершения функции (так как эта переменная является локальной)? Буду рад вашей помощи в этом вопросе.
void pushBack(int *&arr, int &size, const int value) {
int *midArr = new int[size + 1];
for (int i = 0; i < size; i++)
{
midArr[i] = arr[i];
}
midArr[size++] = value;
delete[] arr;
arr = midArr;
}
int main()
{
int size = 10, value = 3, place=3;
int *arr = new int[size];
fillArr(arr, size);
pushBack(arr, size, value);
showArr(arr, size);
delete[] arr;
}
Метод fillArr()
void fillArr(int *const arr, const int size) {
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 10;
}
}
Метод showArr()
void showArr(const int *const arr, const int size) {
for (int i = 0; i < size; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
Ответы (1 шт):
У вашей функции int *midArr = new int[size + 1]; переменная midArr занимает в стеке 8 байт. На что указывать будут указатели не важно, так как указатель это элементарный тип без деструктора.