Когда я делаю два последовательных free()
на одном и том же указателе, он дает двойную бесплатную ошибку, но когда я пытаюсь освободить один и тот же указатель два раза в промежутке между освобожденным другим указателем, он не дает ошибку.Почему следующий код не дает двойной ошибки?
#include <stdio.h>
#include <stdlib.h>
int main(){
long int*ptr;
int *ptr1;
ptr = malloc (1);
ptr1 = malloc (1);
printf ("%ld\n", ptr[-1]);
free (ptr);
printf ("%ld\n", ptr[-1]);
free (ptr1);
free (ptr);
free (ptr1);
free (ptr);
free (ptr1);
return 0;
}
Двойной бесплатный не должен указывать на ошибку в первую очередь – user3528438
Это просто неопределенное поведение. – George
*** Ошибка в './app ': двойная свобода или коррупция (fasttop): 0x0000563f04897010 *** –