little_greg Posted October 14, 2010 Report Share Posted October 14, 2010 Возник вопрос на счет того, можно ли увеличить размер памяти, который уже выделен, например, когда недостаточно того, что есть и нужно еще. #include <iostream>using namespace std;int main(){ char* str = new char[5]; int i = 0; while (cin.get(str[i]) && str[i]!='\n') i++; cout << str; return 0;} Link to comment Share on other sites More sharing options...
Yezhishe Posted October 14, 2010 Report Share Posted October 14, 2010 Эм-м-м... Кому выделен? И кому нужен? Собственно, кто определяет-то, что нужно ещё? Если какое-то приложение чего-то хочет (по объёму ОЗУ) - больше того, что доступно, оно всё равно не получит. Оффтоп Как в том анекдоте - "Съесть-то он съест, да кто ж ему даст-то?" Link to comment Share on other sites More sharing options...
little_greg Posted October 15, 2010 Author Report Share Posted October 15, 2010 ну предположим тип char размером 1 байт, я выделяю место в памяти для слова, например, из 5 символов - 5 байт, а считывается, например, из файла, слово длиной болеше, чем 5 символов (или 5 байт), так вот, я мне интересно, можно ли каким-либо способом увеличить то адресное пространство, которое я выделил изначально, т.е. из 5 байт увеличить до 10 Link to comment Share on other sites More sharing options...
Amsterdam Posted October 20, 2010 Report Share Posted October 20, 2010 Выделить по-новой, переместить в заново выделенный массив старую информацию, считать новую. Достаточно затратно. Как варианты выхода - а) выделять сразу большой объем, который входные данные точно не превысят; б) выделять память под массив после предварительного определения полной длины данных; в) использовать std::vector. Link to comment Share on other sites More sharing options...
little_greg Posted October 21, 2010 Author Report Share Posted October 21, 2010 я где-то читал, что вроде realloc изменяет размер ранее выделенного блока памяти, но только не совсем понял как это работает, может кто-нить объяснить Link to comment Share on other sites More sharing options...
Teddy_Bear Posted October 22, 2010 Report Share Posted October 22, 2010 Имеется в виду вручную? Тогда в Дельфе есть процедура procedure ReallocMem(var P: Pointer; Size: Integer); Указываете пойнтер на переменную и желаемый размер. В Cи то же. Link to comment Share on other sites More sharing options...
Amsterdam Posted October 22, 2010 Report Share Posted October 22, 2010 Realloc - это из C. С new (C++) его сочетать точно не стоит. Про это у Страуструпа можешь почитать. Здесь доходчиво достаточно про собственно использование realloc написано. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now