这是一个面试问题。 如果使用malloc获取一块内存,例如:
char *p = (char *) malloc (100);
现在你发现你需要更多的内存,比如说130.如何获取内存以使新的内存仍然是连续的
答案 0 :(得分:9)
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
答案 1 :(得分:0)
来自所有显而易见的realloc
和malloc
答案的公寓,如果你使用的是MSVC,你可以使用_expand
,它会尝试调整块的大小,没有移动它