Так есть ли функция в любой библиотеке, как я хочу?
Нет, нет. Как система может увеличить объем памяти, если в ней нет места?
например. представьте, что вы делаете это:
char *a = malloc(2);
char *b = malloc(2);
Теперь выделенная память может выглядеть следующим образом:
1 2 3 4 5 6 7
-------------------------
| | | | | | |
-------------------------
\ /\ /\ /
\ / \ / \ /
v v v
memory unused/ memory
for "a" internal for "b"
memory piece
Теперь вы делаете realloc(a,10);
. Система не может просто расширить часть памяти для «а». Он попадет в память, используемую "b", поэтому вместо этого он должен найти другое место в памяти, которое имеет 10 смежных свободных байтов, скопировать 2 байта из старого фрагмента памяти и вернуть вам указатель на эти новые 10 байтов .