Я прошел через пример relloc в C here. Я не мог понять, что делает realloc() в этом фрагменте, потому что даже когда я прокомментировал инструкцию realloc, программа прошла нормально. Я снова добавляю код здесь, чтобы вам было легче пройти.Что делает realloc в этом фрагменте кода?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
/* Initial memory allocation */
str = (char *) malloc(15);
strcpy(str, "tutorialspoint");
printf("String = %s, Address = %u\n", str, str);
/* Reallocating memory */
str = (char *) realloc(str, 25);
strcat(str, ".com");
printf("String = %s, Address = %u\n", str, str);
free(str);
return(0);
}
Насколько я понял таНос() первоначально выделила строку, чтобы быть длиной 15 байт, а затем перераспределить() переназначить ее, чтобы быть 25 символов. Но как он все еще работает нормально, хотя я удаляю оператор realloc() из фрагмента? Я что-то упустил из этого?
Поскольку память уже была выделена, указатель остается в силе. realloc() просто выполняет перераспределение ранее выделенной памяти или если указатель предоставлен NULL, он будет делать malloc(). поэтому в вашем примере выделена область памяти. удалив realloc(), он не был перераспределен или изменен, но исходный указатель все еще действителен. –
Это не работает, вы развращаете кучу. И нет, вы * не * гарантированно попадете на пальцы пальцев, делая это, ваша программа будет килить, когда вы меньше всего этого ожидаете. Давно после того, как был нанесен урон, что затрудняет поиск ошибки. Урок, который вы запомните. –