Prend un bout de papier, découpe le d'une seule case, et pose le quelque part sur la table : ça c'est le malloc.
Commence à écrire des nombres dedans : une case par nombre.
Comme ta feuille ne fait qu'une seule case, tu écris le premier nombre dessus, et puis les autres....
- tu les écris sur la table (A)
- ou bien sur une autre feuille qui était à coté (B)
- tu es au bord de la table et tu tombes. (C)
C'est ce que tu fais, on dit que tu débordes, et ton programme est instable. Selon l'endroit ou le malloc "posera ta feuille", tu auras donc :
(A) : ça marche par "chance" -> c'est ton cas.
(B) : tu pines d'autres variables et la c'est la merde.... Quand tu as une variable qui n'a rien demandée et qui est modifiée... c'est que sa "feuille" était à coté de celle de laquelle tu as débordé.
(C) : tu plantes. (segment faut ; "ce programme va être arrêté....")
Quoiqu'il en soit, ton programme est instable. Aujourd'hui il marche, demain il ne marchera peut être plus.
@Fvirtman: Ça ne dit pas ce qu'il faut faire ... Qu'est-ce qu'on veut réserver dans ce malloc? De la place pour 20 entiers (int). Ça devrait ressembler à ceci: réserver 20 * place pour un int int *p = malloc(20 * sizeof(int));
Le Tout est souvent plus grand que la somme de ses parties.
Il me semblait que son problème n'était pas de "comment il faut faire", mais "pourquoi ça marche alors que je fais comme ça et je pensais que ça ne devrait pas !"
Mais bon, du coup il a mon explication, et également comment il faut faire avec ton message
Ton expression de sizeof alloue un entier. Si tu veux allouer de la place pour 10 entiers, tu dois faire une multiplication.
malloc(sizeof (int) * 20);
git is great because Linus did it, mercurial is better because he didn't.
Malloc tableau dynamique
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
git is great because Linus did it, mercurial is better because he didn't.