J'ai la fameuse erreur 0xC0000005, j'ai réussi à cibler l'erreur, cependant impossible de la résoudre
Le code est en c, ici le header
//
// Created by Scotch on 13/09/2023.
//
#ifndef TD1_HEADER_H
#define TD1_HEADER_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Sommet{
char *nom;
int numsommet;
}t_sommet;
typedef struct Graphe{
int **matrice;
int ordre;
t_sommet *sommet;
}t_Graphe;
t_sommet init_sommet(int numsommet, char nom[]);
void init_graphe(int ordre, t_Graphe *graphe);
void lecture(char nomfichier[],t_Graphe *graphe,t_sommet *Sommet);
void influence(t_Graphe *graphe);
#endif //TD1_HEADER_H
et là le .c
#include "header.h"
t_sommet init_sommet(int numsommet, char nom[]){
t_sommet Sommet;
int longueur = strlen(nom);
Sommet.nom = malloc(longueur * sizeof (char));
strcpy(Sommet.nom, nom);
Sommet.numsommet = numsommet;
return Sommet;
}
void init_graphe(int ordre, t_Graphe *graphe){
graphe->ordre=ordre;
graphe->matrice= malloc(ordre * sizeof (int*));
graphe->sommet = malloc(ordre * sizeof (int));
for(int i=0; i<ordre; i++){
graphe->matrice[i] = calloc(ordre,sizeof (*graphe->matrice[i]));
}
}
void lecture(char nomfichier[],t_Graphe *graphe,t_sommet *Sommet){
FILE *fichier = NULL;
int ordre=0;
char nom [15];
fichier = fopen(nomfichier, "r");
if (fichier != NULL)
{
printf("marche");
// On peut lire et écrire dans le fichier
}
else
{
// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier");
}
fscanf(fichier, "%d", &ordre);
init_graphe(ordre,graphe);
for(int i=0; i<7; i++){
int sommet=0;
fscanf(fichier,"%d %s",&sommet,nom);
fflush(stdin);
graphe->sommet[i] = init_sommet(sommet,nom);
printf("%d %s \n",graphe->sommet[i].numsommet, graphe->sommet[i].nom);
}
/* for(int i=0; i<7; i++){
int a=0; int b=0;
fscanf(fichier,"%d %d",&a, &b);
graphe->matrice[a][b]=1;
}*/
free(fichier);
}
void influence(t_Graphe *graphe){
for(int i=0; i<7; i++){
for(int j=0; j<7; j++){
if(graphe->matrice[i][j]==1){
printf("%s influence %s", graphe->sommet[i].nom, graphe->sommet[j].nom);
}
}
}
}
int main() {
t_Graphe *Graphe = NULL;
t_sommet *Sommet = NULL;
Graphe = malloc(sizeof (t_Graphe));
char nomfichier[50];
printf("Saisissez le nom du fichier :");
scanf("%s", nomfichier);
printf("\n %s", nomfichier);
lecture(nomfichier,Graphe,Sommet);
influence(Graphe);
return 0;
}
L'erreur arrive lorsque i = 6 dans la fonction lecture, et plus particulèrement ligne 8 lorsqu'on veut allouer Sommet.nom dans le sous programme init_sommet
Ca fait 1h que je refléchi à ce qui pourrait causer ce pb / résoud d'autres soucis sur mon code mais là j'avoue que je suis à cours d'idée et j'aurais bien besoin d'un petit coup de main.
On peut utiliser strdup, pour dupliquer une chaîne.
Ça supprime une occasion de faire une étourderie dans du code tellement évident qu'on n'y prête plus attention. Et que le cerveau refuse de relire quand on cherche pourquoi le code qu'on a écrit plante (*). Phénomène courant, la vie de tous les jours des gens qui programment.
Sommet.nom = strdup(nom);
(1) dans le code des autres, ça saute aux yeux, évidemment.
- Edité par michelbillaud 19 septembre 2023 à 8:58:37
Quand on voit des malloc dans un code on cherche les free correspondants... Qu'essaies-tu de faire ligne 54 ?
Bonne continuation.
Problème allocation de mémoire
× 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