Problem de mémoire
Résolu/Fermé
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
-
31 oct. 2014 à 03:00
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 1 nov. 2014 à 15:33
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 1 nov. 2014 à 15:33
A voir également:
- Problem de mémoire
- Mémoire vive - Guide
- Test memoire pc - Guide
- Nettoyer memoire iphone - Guide
- Mémoire virtuelle - Guide
- Controleur de mémoire pci ✓ - Forum Matériel & Système
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
31 oct. 2014 à 09:54
31 oct. 2014 à 09:54
Pourquoi enlever le "Bonjour" mis en place automatiquement ???
La politesse est de rigueur sur CCM.
Je n'ai pas tout lu (tu as mal utilisé les balises "code c", du coup, ce n'est pas trop lisible), mais je vois déjà un gros problème.
Tu as alloué la structure maillon, mais tu n'as pas alloué les champs qui la composent (nom, ...). Du coup segfault.
Note : tu as oublié les free().
Cdlt,
La politesse est de rigueur sur CCM.
Je n'ai pas tout lu (tu as mal utilisé les balises "code c", du coup, ce n'est pas trop lisible), mais je vois déjà un gros problème.
Tu as alloué la structure maillon, mais tu n'as pas alloué les champs qui la composent (nom, ...). Du coup segfault.
Note : tu as oublié les free().
Cdlt,
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
Modifié par informatique_c le 31/10/2014 à 11:00
Modifié par informatique_c le 31/10/2014 à 11:00
bonjourd fiddy oué dsl j'été presser , tu veux dire qu'il faux allouer le nom, prenom ,position et valeur ??
tu veux dire comme ça :
ex :
tu veux dire comme ça :
ex :
char * (joueur->nom)=(char*)malloc(sizeof(char));//chêne de caractères char * (joueur->prenom)=(char*)malloc(sizeof(char));//chêne de caractères char (joueur->position)=(char)malloc(sizeof(char));//caractère int (joueur->valeur)=(int)malloc(sizeof(int));//entier
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
31 oct. 2014 à 10:53
31 oct. 2014 à 10:53
Oui, il faut allouer chacun des pointeurs.
Attention, tes exemples sont faux.
Je t'en donne un correct :
Pas besoin de cast et il ne faut pas oublier de mentionner la taille de l'allocation. Le sizeof(char) fait systématiquement 1. Donc tu n'es pas obligé de le mettre.
Attention, tes exemples sont faux.
Je t'en donne un correct :
joueur->nom=malloc(TAILLE);
Pas besoin de cast et il ne faut pas oublier de mentionner la taille de l'allocation. Le sizeof(char) fait systématiquement 1. Donc tu n'es pas obligé de le mettre.
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
Modifié par informatique_c le 31/10/2014 à 11:13
Modifié par informatique_c le 31/10/2014 à 11:13
j'ai fais :
est-se-que c'est juste ??
je veux dire le type du sizeof des chaines nom et prenom (esque c juste de maitre le * )
joueur->nom=malloc(sizeof(char*));//chêne de caractères joueur->prenom=malloc(sizeof(char*));//chêne de caractères joueur->position=malloc(sizeof(char));//caractère joueur->valeur=malloc(sizeof(int));//entier joueur->valeur=malloc(sizeof(int));//entier joueur->suiv=malloc(sizeof(LISTE));
est-se-que c'est juste ??
je veux dire le type du sizeof des chaines nom et prenom (esque c juste de maitre le * )
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
31 oct. 2014 à 11:20
31 oct. 2014 à 11:20
Non, ce n'est pas bon...
Par TAILLE, j'entends la longueur de la chaîne souhaitée.
Si par exemple, tu veux que nom est une taille de 50 alors :
<code c>joueur->nom=malloc(50);
Etc.
Pour int valeur, il n'y a rien à allouer ce n'est pas un pointeur...
Et pour MAILLION* suiv; il n'y a rien à allouer non plus. Il s'agit de sauvegarder l'adresse sur le maillon suivant lors d'un ajout de noeud à la liste.
Par TAILLE, j'entends la longueur de la chaîne souhaitée.
Si par exemple, tu veux que nom est une taille de 50 alors :
<code c>joueur->nom=malloc(50);
Etc.
Pour int valeur, il n'y a rien à allouer ce n'est pas un pointeur...
Et pour MAILLION* suiv; il n'y a rien à allouer non plus. Il s'agit de sauvegarder l'adresse sur le maillon suivant lors d'un ajout de noeud à la liste.
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
31 oct. 2014 à 11:30
31 oct. 2014 à 11:30
j'ai compris Mercie boucoup fiddy tu m'as boucoup aider
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
31 oct. 2014 à 11:37
31 oct. 2014 à 11:37
il y'a un autre problème au niveau de la fonction affichage car le
lister->premierne veux pas incrémenter...
informatique_c
Messages postés
30
Date d'inscription
mardi 22 juillet 2014
Statut
Membre
Dernière intervention
17 mars 2016
1
31 oct. 2014 à 10:52
31 oct. 2014 à 10:52
voila
#include <stdio.h> #include <stdlib.h> //------------------------------------- typedef struct MAILLION MAILLION; struct MAILLION{ char* nom; char* prenom; char position; int valeur ; MAILLION* suiv; }; //-------------------------------------- typedef struct LISTE LISTE; struct LISTE{ MAILLION* premier; }; //-------------------------------------- LISTE* construction_liste(){ LISTE * equipe=(LISTE*)malloc(sizeof(LISTE)); return equipe; } void ajouter_tete(LISTE * equipe){ MAILLION* joueur = (MAILLION*)malloc(sizeof(MAILLION)); puts("Faites entrez :"); printf("le Nom :\n"); scanf("%s",(joueur->nom)); printf("Le Prenom :\n"); scanf("%s",(joueur->prenom)); printf("La position :\n"); getchar();// vider la ligne joueur->position=getchar(); printf("La Valeur :\n"); scanf("%d",&(joueur->valeur)); joueur->suiv=equipe->premier; equipe->premier=joueur; } void affichage(LISTE* lister){ while(lister->premier!=NULL){ printf(" %s %s %c %d \n\n",lister->premier->nom,lister->premier->prenom,lister->premier->position,lister->premier->valeur); lister->premier=lister->premier->suiv; } } int main() { LISTE * equipe = construction_liste(); int i=20; while(i!=10){ ajouter_tete(equipe); i++; } affichage(equipe); return 0; }
Modifié par sambia39 le 1/11/2014 à 15:33
à bientôt