Pourquoi je ne vois jamais le texte Hello dans la console dans ce programme?

Ceci est le code que j’ai, fonctionnant sur OS X Yosemite

int main(int argc, char *argv[]){ while (1) { srand(time(NULL)); int r = rand(); printf("Allocating\n"); int *pi = malloc(5000000 * sizeof(int)); if(pi==NULL){ printf("Hello"); } memset(pi, r, 5000000 * sizeof(int)); } } 

Donc, ce programme cesse finalement de fonctionner, les dernières lignes de la console sont:

Atsortingbution

Atsortingbution

Atsortingbution

Tués: 9

Korays-MacBook-Pro: hello2 koraytugay $

Si malloc ne renvoie pas la valeur NULL dans cette situation, quand le fera-t-il? Ma compréhension est qu’un problème d’allocation de mémoire se produit ici, mais pourquoi “Hello” n’est pas imprimé?

Linux va tuer le programme si vos besoins en mémoire sont supérieurs à la mémoire disponible, ce qui fait que malloc ne renvoie jamais la valeur NULL.

Vous pouvez désactiver cette fonctionnalité en utilisant echo 2> / proc / sys / vm / oversommit_memory.

Je suspecterais que printf mette “Hello” en sortie, puis vous essayez de memset avec un pointeur null et le processus est tué avant que le “Hello” mis en queue ne soit traité. Vous pouvez essayer de vider stdout après Hello (fflush).