Code :
- char * s = "looool\n";
|
En faisant ceci, tu déclares une chaîne immodifiable.
A la compilation, le compilo alloue la chaine "looool\n" dans une zone spéciale ("allocation statique" ), et à l'exécution, il fait pointer s sur cette zone, et si tu veux y modifier quelque chose, il y aura une "segmentation fault".
Pour ce que tu veux faire, il faut faire un truc de ce genre:
char s[8];
strcpy(s, "looool\n" );
Ici, le compilo alloue à l'exécution une zone mémoire de 8 octets sur la pile ("allocation dynamique sur la pile), et il remplit ensuite cette zone en copiant la chaîne "looool\n" dans cette zone. Comme précédemment, "looool\n" a été allouée à la compilation, dans une zone spéciale.
ou bien
char *s = malloc(8);
strcpy(s, "looool\n" );
...
free(s);
Ici, le compilo alloue à l'exécution une zone mémoire de 8 octets sur le tas ("allocation dynamique sur le tas), et il remplit ensuite cette zone en copiant la chaîne "looool\n" dans cette zone. Comme précédemment, "looool\n" a été allouée à la compilation, dans une zone spéciale.
L'allocation sur la pile à pour durée de vie le bloc ou la variable est déclarée, il y a libération automatique de la mémoire lorsqu'on en sort. Celle sur le tas a une durée de vie persistante, tant qu'on a pas libéré la mémoire avec free.
A+,
Message édité par gilou le 28-03-2013 à 17:39:57
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --