Tu déclares un pointeur a sans l'initialisé, il pointe donc n'importe ou en mémoire (probablement sur une zone mémoire non allouée a ton programme) et ensuite tu le déréférence en faisant *a pour écrire a l'emplacement ou pointe a en faisant *a = 3.
Tu essayes donc d'écrire dans une zone mémoire non allouée a ton programme et ton OS t'envoie gentillement dans les roses en te disant que tu ne peux pas.
Si tu veux vraiment passer par un pointeur, il faut passer par malloc.
Seconde erreur, tu déclares un tableau de 3 cases, les index vont donc de 0 a 2 (inclus), et toi, tu essayes d'écrire a la 4eme case de ton tableau en faisant array[3] = 4; Tu es donc en dehors de ton tableau, et donc très certainement crash.
Ceci dit, avec b tu fais n'importe quoi aussi. Tu déclares un pointeur b (non initialisé), puis plus tard tu fais un malloc dessus, ce qui est une bonne chose. Cependant, pourquoi un malloc de 2 ? Et surtout, en dessous, pourquoi faire *(b +2) ? En faisant ça tu prends l'adresse sur laquelle pointe b et tu décales de 2 octets, et vu que tu as fais un malloc de 2 octets, si tu écris a cet endroit, tu es hors de la zone mémoire qui t'es allouée et c'est exactement l'erreur que tu fais puisque tu essayes d'écrire a cet emplacement précis en faisant *(b+2) = quelquechose.
- Edité par ironwolf151 7 septembre 2020 à 17:56:43
Je vais poser une question bête peut être, mais, quelle est l'utilité de ce bout de code en fait ? parceque ce qu'il fait n'a pas vraiment de sens a première vue.
Bon, déjà on n'alloue pas un entier quand il suffit de le déclarer car une allocation coûte du temps et de la mémoire... Et non, allouer un int ne prend pas 4 (ou 8) octets en mémoire.
Ensuite parce que l'allocation est surtout utilisée pour combler l'incapacité du programmeur à deviner le volume de mémoire nécessaire lors de l'exécution. Si on peut ne-serait-ce que l'estimer, on déclare grand.
Personnellement, si je peux être certain d'avoir besoin d'au max 2ko, je déclare un char tab[2000].
Une allocation, ça se libère, les libérations sont une habitude à prendre immédiatement, même pour "juste un entier".
Force toi à trouver une utilité à ton code. Je me doute que si ton code n'a pas de sens, c'est que tu veux essayer des trucs ou comprendre comment ça se passe, mais dans ce cas, il faut faire de l'affichage, tes calculs se font ou pas mais tu n'as pas moyen de savoir si ça fait ce que tu attends que ça fasse.
Hello, je reprends mes vieux cours incomplets de C de la université et je n'arrivais pas à voir ce qui clochait sur cet exercice là. (Et bien sur je n'avais pas de correction ou d'explication avec moi).
En tout cas, merci, j'ai laissé mes feuilles jaunies de mes classeurs pour suivre les cours de C d'openclassroom qui sont bcp clair à mon gout !
Segmentation fault (core dumped) erreur
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Bonhomme !! | Jeu de plateforme : Prototype.