Вы можете , конечно, расширить массив, но вам нужно позаботиться о копировании содержимого и освобождении старого массива (ваш код, помимо неправильного синтаксиса, сокращает массив, кстати).
Именно так и работает std::vector
, , просто вам не нужно заботиться .
Так что, в принципе, имея int *a
уже выделено, что должно произойтиэто что-то вроде:
{
std::unique_ptr<int[]> d(a);
a = new int[desired_new_size];
for(unsigned int i = 0; i < min_old_size_and_new_size; ++i)
a[i] = d[i];
}
Обратите внимание, что, строго говоря, "расширение" никогда не на самом деле расширяет массив, но заменяет его на другой больший (это верно для любых контейнеров, предлагающих те же функции).тоже).Но это прозрачно для любого кода, использующего указатель позже, никто не узнает.
Вы должны никогда не использовать realloc
(или любые другие функции выделения памяти C) в сочетании с выделенной памятью илиосвобожден operator new
и delete
(или new[]
и delete[]
), как указано выше.
Этот может работать (и обычно будет), но это концептуально неправильно, и это чистоудачи (неизвестные подробности реализации), если не произойдет сбой.