IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

mémoire peut pas etre "read"


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut mémoire peut pas etre "read"
    salut,

    apré une compilation réussie, je reçois le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    L'instruction à "0x00401068" emploie l'adresse mémoire "0xccccccf0".la mémoire ne peut pas être "read".
    mon programme ouvre un fichier en lecture, copie son contenu dans un liste chainée et affiche cette derniere.

    merci

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour
    Le message de description n'est pas très clair.... en passant en mode debug (pas à pas) ou en documentant (à l'aide de printf) le code, tu pourra déjà savoir où se situe l'erreur et nous le dire comme ca on pourra t'aider mieux.

    Sinon, une erreur
    l'adresse mémoire "0xccccccf0".la mémoire ne peut pas être "read".
    ressemble beaucoup à un pointeur déclaré mais pas initialisé avant utilisation...

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    L'instruction à "0x00401068" emploie l'adresse mémoire "0xccccccf0".la mémoire ne peut pas être "read".
    Ton programme accède à une zone mémoire qui ne lui est pas attribuée. Ceci arrive quand une adresse (un pointeur) n'a pas été initialisée ou que l'objet pointé a été détruit ou lors de dépassement de tableau ou ...
    Il faudrait voir le code pour plus de précision
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Et le fait qu'il y ait plusieurs octets égaux à 0xCC dans l'adresse en question laisse penser que tu utilises VC++.
    Vu qu'ils ne sont pas tous à 0xCC, cela laisse penser que tu modifies partiellement (et peut-être indirectement) un pointeur non initialisé à un moment ou à un autre.
    Le plus probable est que le pointeur soit censé permettre d'accéder à une structure et que le problème intervient quand tu essayes d'accéder (en lecture) à un membre de cette structure situé 36 octets après le début de cette dernière (0xCCCCCCF0 - 0xCCCCCCCC = 0x24 = 36).

    Si le programme ne fait pas 15000 lignes, il vaut mieux le poster pour avoir des détails, sinon, il faut aller voir un site de voyance ou utiliser le debugger intégré à VC++.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci les amis, j'ai résolu le problème;
    je crois que j'avais un pointeur non initialisé
    par contre j'ai un petit problème d'affichage:
    lors de l'affichage des lignes d'un fichier texte, il m'affiche la premiere ligne 2 fois.

    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include <conio.h>
     
    /*la structure d'un article (lecture à partir de article.txt)*/
    struct article
    {
    	int code_art;
    	int code_four;
    	char design[20];
    	char famille;
    	float prix;
     
    };
    typedef struct article ARTICLE;
     
    /*la structure décrivant les composants d'un produit,
     (lecture à partir de process.txt) */
    struct process
    {
    	int code_composant;
    	int code_compose;
    	int qte;
     
    };
    typedef struct process PROCESS;
     
    /*liste chainée des articles :*/
    struct list_article
    {
    	ARTICLE art;
    	struct list_article *suiv;
    };
    typedef struct list_article LIST_ARTICLE;
     
    /*arbre du contenu de process.txt :*/
    struct arbre 
    {
    	ARTICLE art;
    	int qte;
    	struct arbre *fils,*frere;
    };
    typedef struct arbre ARBRE;
    /***********************************************************/
     
    /*get_last(list_chain)/
    	-renvoi le dernier maillon de list_chain
    	-concerne la liste chainée des articles  */
     
    LIST_ARTICLE* get_last(LIST_ARTICLE* list)
    {
    	LIST_ARTICLE*pcour;
    	pcour=list;
    	if(list==NULL) exit(1);
    	else
    		while(pcour->suiv !=NULL)
    			pcour=pcour->suiv;
     
     
    	return (pcour);
     
     
    }
     
     
    /***********************************************************/
    //fonction inserer_queue; insère un nouveau maillon à la queue de liste
     
    LIST_ARTICLE* inserer_queue(ARTICLE kart,LIST_ARTICLE *lart)
    {
    LIST_ARTICLE *l,*p;
    l=(LIST_ARTICLE*)malloc(sizeof(LIST_ARTICLE));
    l->art=kart;
    l->suiv=NULL;
    if(lart==NULL)
    {
    	lart=l;
    }
    else
    {
    	p=get_last(lart);
    	p->suiv=l;
    }
     
    return(lart);
    }
    /***********************************************************/
    /*fonction aff_list_art
    	-affiche la liste chainée des articles	*/
     
    void aff_list_art(LIST_ARTICLE*list)
    {
    	LIST_ARTICLE*move;
    	move=list;
    	if (list==NULL) printf("liste vide");
    	else
    	while(move!=NULL)
    	{
    		printf("%4d %4d %20s %c %10.3f\n",move->art.code_art,move->art.code_four,move->art.design,move->art.famille,move->art.prix);
    		move=move->suiv;
    	}
    }
     
     
    /***********************************************************/
     
    void main()
    {
    FILE *f;
    char s[100];
    ARTICLE a; 
    LIST_ARTICLE *lart=NULL;
     
    f=fopen("c:\\article.txt","r");
    rewind(f);//placer curseur au debut du fichier
    	while(fgets(s,100,f))
    		{
    		sscanf(s,"%4d %4d %20s %c %f",&a.code_art,&a.code_four,a.design,&a.famille,&a.prix);
     
    		lart=inserer_queue(a,lart);
     
    		/*affichage de la liste des articles: */
    		aff_list_art(lart);
     
    	}
     
    fclose(f);
     
    }
    et voici mon fichier "article.txt":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    21045877sucre               P13.43
    60235988spaghettis          M326.5654
    merci.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par zhoom
    lors de l'affichage des lignes d'un fichier texte, il m'affiche la premiere ligne 2 fois.
    C'est plutôt étonnant car :
    - ton code n'affiche pas les "lignes d'un fichier texte" mais le contenu d'une liste construite à partir des lignes d'un fichier texte (ce qui n'est pas la même chose) ;
    - à mon avis il n'affiche pas 2 fois la première ligne d'un fichier texte, mais 2 fois la première ligne du fichier texte que tu donnes en exemple...as-tu essayé avec un fichier de trois lignes ? La première ligne n'est-elle pas affichée 3 fois dans ce cas et la seconde 2 fois ?

    Ces indices devraient suffire...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    d'accord:

    voici mon "article.txt":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    21045877sucre               P13.43
    60235988spaghettis          M326.5654
    32125808chocolat          P62.3327
    et voila ce que ça donne en exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    2104 5877                       sucre P    13.430
    2104 5877                       sucre P    13.430
    6023 5988                spaghettis M  326.565
    2104 5877                       sucre P    13.430
    6023 5988                spaghettis M  326.565
    3212 5808                  chocolat  P    62.333

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Où est le problème ??? Ton prog fait exactement ce que tu dis de faire, à savoir
    je lis une ligne
    j'insere la ligne dans l'arbre
    j'affiche l'arbre

    A la première lecture
    tu inseres 21045877sucre P13.43
    et tu affiches 21045877sucre P13.43

    A la deuxième lecture
    tu inseres 60235988spaghettis M326.5654
    et tu affiches l'arbre c'est à dire
    21045877sucre P13.43
    60235988spaghettis M326.5654

    etc

    Donc tout fonctionne correctement

    Au passage, suis la norme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // la fonction main doit retourner un entier
    int main(void)
    {
    FILE *f;
    char s[100];
    ARTICLE a;
    LIST_ARTICLE *lart=NULL;
     
    f=fopen("c:\\article.txt","r");
     
    // ne sert à tien, tu vines d'ouvrir le fichier !
    rewind(f);//placer curseur au debut du fichier
     
       while(fgets(s,sizeof(s) ,f)) // plus facile à maintenir avec sizeof
          {
          sscanf(s,"%4d %4d %20s %c %f",&a.code_art,&a.code_four,a.design,&a.famille,&a.prix);
     
          lart=inserer_queue(a,lart);
     
       }
         /* pour faire ce que tu veux, sors l'affichage de l'arbre de la boucle */
          /*affichage de la liste des articles: */
          aff_list_art(lart);
     
    fclose(f);
      return 0;
     
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/01/2009, 09h50
  2. Réponses: 8
    Dernier message: 29/03/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo