Problem de mémoire
Résolu
informatique_c
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problem de mémoire
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Nettoyer memoire iphone - Guide
- Mémoire virtuelle pour 32 go de ram - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
3 réponses
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,
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
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 * )
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.
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; }
à bientôt