Copyright (C) 2000-2012 |
GNU Info (libc.info)Changing Block SizeChanging the Size of a Block ............................ Often you do not know for certain how big a block you will ultimately need at the time you must begin to use the block. For example, the block might be a buffer that you use to hold a line being read from a file; no matter how long you make the buffer initially, you may encounter a line that is longer. You can make the block longer by calling `realloc'. This function is declared in `stdlib.h'. - Function: void * realloc (void *PTR, size_t NEWSIZE) The `realloc' function changes the size of the block whose address is PTR to be NEWSIZE. Since the space after the end of the block may be in use, `realloc' may find it necessary to copy the block to a new address where more free space is available. The value of `realloc' is the new address of the block. If the block needs to be moved, `realloc' copies the old contents. If you pass a null pointer for PTR, `realloc' behaves just like `malloc (NEWSIZE)'. This can be convenient, but beware that older implementations (before ISO C) may not support this behavior, and will probably crash when `realloc' is passed a null pointer. Like `malloc', `realloc' may return a null pointer if no memory space is available to make the block bigger. When this happens, the original block is untouched; it has not been modified or relocated. In most cases it makes no difference what happens to the original block when `realloc' fails, because the application program cannot continue when it is out of memory, and the only thing to do is to give a fatal error message. Often it is convenient to write and use a subroutine, conventionally called `xrealloc', that takes care of the error message as `xmalloc' does for `malloc': void * xrealloc (void *ptr, size_t size) { register void *value = realloc (ptr, size); if (value == 0) fatal ("Virtual memory exhausted"); return value; } You can also use `realloc' to make a block smaller. The reason you would do this is to avoid tying up a lot of memory space when only a little is needed. In several allocation implementations, making a block smaller sometimes necessitates copying it, so it can fail if no other space is available. If the new size you specify is the same as the old size, `realloc' is guaranteed to change nothing and return the same address that you gave. automatically generated by info2www version 1.2.2.9 |