Войти

Показать полную графическую версию : C++ | Корректность использования realloc в парах new/delete


penykov
06-08-2005, 18:37
Если мне потребовалось больше памяти, чем я выделил с помощью new,
корректно ли будет увеличить её размер с помощью realloc, а в конце работы удалить при помощи delete?

знаю, что работает, но это правильно?

ivank
07-08-2005, 17:09
penykov
Нет, это неправильно.

penykov
07-08-2005, 17:54
А как тогда надо? Чтобы прежние данные сохранились.

vadimiron
07-08-2005, 18:33
Надо свою функцию написать, которая создаст нужное пространство в памяти (старый объём + новый), копирует туда старые данные (есть такие функции как memcpy() или memmove()) и удалит старое пространство в памяти.
Это примерный алгоритм.

penykov
08-08-2005, 19:09
а не лучше тогда забить на new и delete и пользоваться malloc, realloc, free?

ivank
08-08-2005, 20:56
penykov
не лучше, потому что new, new[], delete и delete[] вызывают конструктор/деструктор. Что весьма важно в C++.

pva
10-08-2005, 13:57
Проще воспользоваться шаблоном vector<>. Он умеет всё, что нужно,
работает эффективно (в т.ч. старается уменьшить количество вызовов new/delete),
а в некоторых реализациях ещё и память пытается экономить.
Его можно использовать как универсальный буфер:

std::vector<double> my_table_func;
double d;

while (cin>>d)
{
my_table_func.push_back(d);
}

for(int i=0; i<my_table_func.size(); ++i)
{
cout << my_table_func[i] << '\n';
}

my_table_func.resize(my_table_func.size()*3 + 1);

for(int i=0; i<my_table_func.size(); ++i)
{
cout << my_table_func[i] << '\n';
}




© OSzone.net 2001-2012