Jump to content

Динамическое распределение памяти


Recommended Posts

Возник вопрос на счет того, можно ли увеличить размер памяти, который уже выделен, например, когда недостаточно того, что есть и нужно еще.

#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

Эм-м-м... Кому выделен? И кому нужен?

Собственно, кто определяет-то, что нужно ещё? Если какое-то приложение чего-то хочет (по объёму ОЗУ) - больше того, что доступно, оно всё равно не получит.

Оффтоп
Link to comment
Share on other sites

ну предположим тип char размером 1 байт, я выделяю место в памяти для слова, например, из 5 символов - 5 байт, а считывается, например, из файла, слово длиной болеше, чем 5 символов (или 5 байт), так вот, я мне интересно, можно ли каким-либо способом увеличить то адресное пространство, которое я выделил изначально, т.е. из 5 байт увеличить до 10

Link to comment
Share on other sites

Выделить по-новой, переместить в заново выделенный массив старую информацию, считать новую. Достаточно затратно. Как варианты выхода - а) выделять сразу большой объем, который входные данные точно не превысят; б) выделять память под массив после предварительного определения полной длины данных; в) использовать std::vector.

Link to comment
Share on other sites

я где-то читал, что вроде realloc изменяет размер ранее выделенного блока памяти, но только не совсем понял как это работает, может кто-нить объяснить

Link to comment
Share on other sites

Имеется в виду вручную?

Тогда в Дельфе есть процедура

procedure ReallocMem(var P: Pointer; Size: Integer);

Указываете пойнтер на переменную и желаемый размер.

В Cи то же.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...