bonjour à tous,
Une petite question à propos de la fonction malloc, elle "transforme" notre pointeur en une variable (Ici un un tableau d'int) où la taille
en octet(s) aura été renseigné littéralement ou grâce à la fonction "sizeof" ?
EDIT : Voici un code qui me paraît plus logique :
La fonctin scanf demande une adresse en paramètre, "memoireAllouee" est donc bien un pointeur
On pointe vers l'adresse écrite dans "memoireAllouee" grâce à -> memoireAllouee = malloc(sizeof(int)); <-
on a bien créer une variable en mémoire avec l'allocation dynamique, sont adresse étant stocké dans
le pointeur mémoireAllouee, le seul soucis c'est qu'on travaille avec des adresses et non plus avec
des noms de variables ?
Code:
int main(int argc, char *argv[]) { int nombreDAmis = 0, i = 0; int* ageAmis = NULL; // Ce pointeur va servir de tableau après l'appel du malloc // On demande le nombre d'amis à l'utilisateur printf("Combien d'amis avez-vous ? "); scanf("%d", &nombreDAmis); if (nombreDAmis > 0) // Il faut qu'il ait au moins un ami (je le plains un peu sinon :p) { ageAmis = malloc(nombreDAmis * sizeof(int)); // On alloue de la mémoire pour le tableau if (ageAmis == NULL) // On vérifie si l'allocation a marché ou pas { exit(0); // On arrête tout } // On demande l'âge des amis un à un for (i = 0 ; i < nombreDAmis ; i++) { printf("Quel age a l'ami numero %d ? ", i + 1); scanf("%d", &ageAmis[i]); } // On affiche les âges stockés un à un printf("\n\nVos amis ont les ages suivants :\n"); for (i = 0 ; i < nombreDAmis ; i++) { printf("%d ans\n", ageAmis[i]); } // On libère la mémoire allouée avec malloc, on n'en a plus besoin free(ageAmis); } return 0; }
en octet(s) aura été renseigné littéralement ou grâce à la fonction "sizeof" ?
EDIT : Voici un code qui me paraît plus logique :
Code:
int main(int argc, char *argv[]) { int* memoireAllouee = NULL; memoireAllouee = malloc(sizeof(int)); // Allocation de la mémoire if (memoireAllouee == NULL) { exit(0); } // Utilisation de la mémoire printf("Quel age avez-vous ? "); scanf("%d", memoireAllouee); printf("Vous avez %d ans\n", *memoireAllouee); free(memoireAllouee); // Libération de mémoire return 0; }
On pointe vers l'adresse écrite dans "memoireAllouee" grâce à -> memoireAllouee = malloc(sizeof(int)); <-
on a bien créer une variable en mémoire avec l'allocation dynamique, sont adresse étant stocké dans
le pointeur mémoireAllouee, le seul soucis c'est qu'on travaille avec des adresses et non plus avec
des noms de variables ?
Commentaire