trikker
trikker

Reputation: 2709

Way to increase memory allocated on free store

Is it possible to incrementally increase the amount of allocated memory on a free store that a pointer points to? For example, I know that this is possible.

char* p = new char; // allocates one char to free store
char* p = new char[10]; // allocates 10 chars to free store

but what if I wanted to do something like increase the amount of memory that a pointer points to. Something like...

char input;
char*p = 0;
while(cin >> input)  // store input chars into an array in the free store
    char* p = new char(input);

obviously this will just make p point to the new input allocated, but hopefully you understand that the objective is to add a new char allocation to the address that p points to, and store the latest input there. Is this possible? Or am I just stuck with allocating a set number.

Upvotes: 0

Views: 951

Answers (4)

tpdi
tpdi

Reputation: 35141

You appear to be using C++. While you can use realloc, C++ makes it possible to avoid explict memory management, which is safer, easier, and likely more efficient than doing it yourself.

In your example, you want to use std::vector as a container class for chars. std::vector will automatically grow as needed.

In fact, in your case you could use a std::istreambuf_iterator and std:push_back to std::copy the input into a std::vector.

Upvotes: 1

Mark Bessey
Mark Bessey

Reputation: 19782

You can do this using the function realloc(), though that may only work for memory allocated with malloc() rather than "new"

having said that, you probably don't want to allocate more memory a byte at a time. For efficiency's sake you should allocate in blocks substantially larger than a single byte and keep track of how much you've actually used.

Upvotes: 2

Alex Martelli
Alex Martelli

Reputation: 881595

The C solution is to use malloc instead of new -- this makes realloc available. The C++ solution is to use std::vector and other nice containers that take care of these low-level problems and let you work at a much higher, much nicer level of abstraction!-)

Upvotes: 4

palindrom
palindrom

Reputation: 19101

realloc

Upvotes: 1

Related Questions