Je pense que cela sera dû à la façon dont C alloue la mémoire. Lorsque vous utilisez la ligne
int a[16]
Ce que vous dites en substance est «me allouer suffisamment d'espace mémoire pour contenir seize entiers, à partir d'un point donné (appeler ce point x
).
Alors quand vous dites que
while(1) {
a[i] = i;
printf("%d\n", a[i]);
i++;
}
Vous dites, pour toujours, définissez l'indice ith
de a
être i
et l'imprimer. Cela fonctionne en commençant à x
et en se déplaçant ensuite, un index à la fois. Pour les seize premiers entiers, c'est bien, car vous avez effacé l'espace pour le faire. Cependant, lorsque vous dépassez cette limite, vous n'avez pas effacé l'espace, vous ne savez donc pas ce qu'il y a et ce que vous pouvez écraser ou imprimer. Cela pourrait être bien pendant un moment, mais vous arriverez à un point où vous ne pouvez pas écraser ce qui est en mémoire (ce n'est pas gratuit). À ce stade, vous obtenez votre . Comme chaque fois que vous exécutez le programme, vous allouerez de l'espace à un endroit différent, il faudra un nombre différent d'itérations pour atteindre le point où la mémoire est prise, et ainsi vous aurez segfault
à différents index.
De quel langage de programmation s'agit-il? Est-ce C? Veuillez marquer votre question avec la langue utilisée. Pour mettre à jour votre question, cliquez sur le lien ** "[edit]" ** sous la publication. Je vous remercie. – Pang