2016-04-17 1 views
-2

Quelqu'un peut-il m'expliquer pourquoi libérer deux fois de suite provoque un plantage, mais en libérant un premier, puis b, puis un autre ne plante pas?Double Free - crash ou pas crash

Je sais qu'un libre va insérer le segment de mémoire dans une liste libre double liée. Libérer deux fois insérerait le même morceau deux fois dans la liste libre. Mais pourquoi l'accident se produit-il?

int *a = malloc(8); 
int *b = malloc(8); 

free(a); 

// free(a); //Would crash! 

free(b); 

free(a); //No crash 
+0

Infosec n'est probablement pas le forum le plus approprié pour cette question. Envisagez StackOverflow. –

+0

Pourquoi devrait-il toujours tomber en panne? Même 'int a [5]; a [10] = 100; 'ne plante pas toujours. – immibis

+0

Apprenez ce qu'est _undefined_ behaviour_ is. Vous finirez par le rencontrer plus d'une fois. – Olaf

Répondre

4

Parce que dans C Lingo, comportement non défini est juste que: non défini. Tout pourrait arriver.

Voir aussi man 3 free:

[...] si free(ptr) a déjà été appelé avant, le comportement est indéterminé.