После malloc как получить больше памяти, которая все еще непрерывна - PullRequest
0 голосов
/ 06 октября 2010

Это вопрос интервью.Если вы используете malloc для получения фрагмента памяти, например:

char *p = (char *) malloc (100);

Теперь вы обнаружите, что вам нужно больше памяти, скажем, 130. Как получить память таким образом, чтобы новый фрагмент памяти все еще был непрерывным1004 *

Ответы [ 2 ]

9 голосов
/ 06 октября 2010
ptmp = realloc(p, 130);
if (ptmp == NULL)
    handle_out_memory_condition();
p = ptmp;

С другой стороны:

p = realloc(p, 130);
if (p == NULL)
    abort();

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

Документация: http://opengroup.org/onlinepubs/007908775/xsh/realloc.html

0 голосов
/ 06 октября 2010

Appart из всех очевидных ответов realloc и malloc, если вы используете MSVC, вы можете использовать _expand, который попытается изменить размер блока, без двигая это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...