Je pourrais être stupide et vous devez m'excuser dans ce cas ... mais je ne comprends pas. J'alloue un buffer de 16 caractères puis (dans une boucle for) mets 23 (!?) caractères aléatoires et ensuite j'imprime ce truc. Ce que je ne comprends pas, c'est comment je peux mettre 23 caractères dans un tampon qui est mallocé en 16 caractères ... Quand je change la boucle à 24 caractères, je reçois une erreur (au moins sous Linux avec gcc) ... mais pourquoi ne pas « plus tôt » (17 caractères doivent casser ... pas)Pas d'erreur même lorsque je dépasse la limite de la mémoire allouée?
Ceci est mon exemple de code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
char *buf;
buf = malloc(16 * sizeof(*buf));
if(buf == NULL) exit(1);
for(n = 0; n < 22; n++)
{
buf[n] = rand()%26+'a';
}
buf[n]='\0';
printf("Random string: %s\n", buf);
free(buf);
buf = NULL;
getchar();
return 0;
}
Probablement un doublon: http://stackoverflow.com/questions/1240970/c-why-do-you-specify-the-size-when-using-malloc http://stackoverflow.com/questions/2336796/ weird-behavior-of-malloc – bk1e