Почему realloc с размером '0' позволяет освобождать указатель несколько раз, а не malloc с размером '0'? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий код.

char *ptr2 = (char*)malloc(0);
char *ptr = (char*)malloc(sizeof(char) * 10);
memcpy(ptr, "Gunasek\0", 8);
ptr = (char*) realloc(ptr, 0);
printf("ptr = %p, ptr2 = %p\n", ptr, ptr2);
//ptr = (nil), ptr2 = 0x602420       (Output)
free(ptr);
free(ptr);//Works fine
free(ptr);//Works fine

free(ptr2);
free(ptr2);//Fails
free(ptr2);

Может ли кто-нибудь объяснить, почему malloc (0) не разрешает бесплатно более одного раза, но realloc (ptr, 0) делает?

1 Ответ

0 голосов
/ 13 ноября 2018

Освобождение ненулевого указателя более одного раза является неопределенным поведением (независимо от того, взято оно из malloc или realloc). Поэтому понимание того, почему ваша конкретная реализация ведет себя так, как она делает, бесполезно. Также было бы опасно полагаться на это поведение, поскольку оно может измениться в будущем или даже в другом контексте.

...