Насколько я знаю, нет точной альтернативы realloc
из C
в C++
, как new
для malloc
. Однако, когда я использую realloc
в C++
для изменения памяти, выделенной оператором new
, все работает нормально.
Безопасно ли использовать эти два (new
и realloc
), как я делаю в приведенных ниже кодах, или это может привести к некоторым проблемам?
#include <iostream>
#include <cstdlib>
int main()
{
int size = 5;
int * arr = new int[size]{ 1,3,5,7,9 };
for (int i = 0; i < size; i++)
std::cout << *(arr + i) << (i < size - 1 ? ' ' : '\n');
size++;
arr = (int*)realloc(arr, size * sizeof(int));
*(arr + size - 1) = 11;
for (int i = 0; i < size; i++)
std::cout << *(arr + i) << (i < size - 1 ? ' ' : '\n');
delete[] arr;
//free(arr);
std::cin.get();
return 0;
}
Кроме того, какой оператор я должен использовать в таком случае для освобождения памяти: delete[]
из free()
?
std::vector
- person NathanOliver   schedule 09.07.2018std::string
? Или действительно любой библиотечный объект? Все, что можно потерять, ничего не приобрести (если, возможно, вы совершенно неправильно понимаетеstd::vector
илиstd::array
). - person Paul Sanders   schedule 09.07.2018new
иmalloc
выделены из разных куч, Edit n Continue не работало в VS2015, я думаю, что это было, потому что, как я обнаружил после изрядного копания, что-то было выделено сmalloc
и позже освобождено сdelete
. Я пропатчилmspdsrv
и поплыл в свое удовольствие (потом исправили). По иронии судьбы, ошибка была «проглочена» какой-то недопустимой логикой обработки параметров, поэтому разработчик, который сделал эту ерунду, никогда не видел никаких доказательств этого (кроме того факта, что его код на самом деле не работал). - person Paul Sanders   schedule 09.07.2018