CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Malloc Programme en C

FrageDev
FrageDev
Niveau 1
08 mars 2018 à 21:54:08

Bonjour,
je suis en train d'allouer de l'espace mémoire pour un tableau en 2D mais je rencontre une erreur. Lors du test si le malloc a fonctionné celui-ci est positif.

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i, j, curseur, nombre_sommet;
	FILE *fichier;
	int **graphe;


	fichier = fopen("matrice.txt", "r");

    if(fichier == NULL)
    {
        printf("Le fichier n'a pas pu etre ouvert.\n");
        return 0;
    }

    printf("Le fichier est ouvert.\n");

	fscanf(fichier, "%c", &nombre_sommet);

	printf("Le nombre de sommets est de %c.\n", nombre_sommet);

	graphe = malloc(nombre_sommet * sizeof(*graphe));

	if(graphe != NULL)
	{
        for(i = 0; i < nombre_sommet; i++)
        {
            graphe[i] = malloc(nombre_sommet * sizeof(*graphe[i]));
            if(graphe[i] == NULL)
            {
                printf("Impossible de creer le tableau.\n");
                free (graphe);
                return 0;
            }
        }

        for(i = 0; i < nombre_sommet; i++)
        {
            for(j = 0; j < nombre_sommet; j++)
            {
                fscanf(fichier, "%c", &curseur);
                graphe[i][j] = curseur;
            }
        }
	}
	else
	{
		printf("Impossible de creer le tableau.\n");
		free (graphe);
        return 0;
	}

	fclose(fichier);

	return 0;
}

Merci de votre aide

aAardvark
aAardvark
Niveau 75
08 mars 2018 à 23:20:24

Ça fait quelque temps que j'ai pas fait de c (enfin quelques mois :noel:), mais ça serait pas car tu récupère un char avec "%c" et non un int "%d" (ou bien que tu ne converti pas le char en int ?)

Sachant que le caractère "1" est par exemple différent de l'entier 1 (cf table ascii) et surtout que donner le mauvais type à un printf entraîne je le pense un effet de bord qui dépend peut-être de l'endianess (là où un cast d'un char en int est plutôt anodin)

Sinon petit lien en plus, même si le problème ne vient peut-être pas de là : https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/ (il y a différentes manières d'organiser les mêmes données)

Message édité le 08 mars 2018 à 23:21:40 par aAardvark
FrageDev
FrageDev
Niveau 1
09 mars 2018 à 12:22:12

Merci beaucoup maintenant sa marche, j'avais déjà essayé le %d mais je ne comprenais pas pourquoi le nombre de sommet ne marchait plus, c'est normal si je change dans le scanf et pas dans le printf .....

godrik
godrik
Niveau 30
09 mars 2018 à 14:42:04

Note que les acces memoire coutent olus cher en faisant la structure en tableau de tableau plutot qu'en une seule plage de memoire.

godrik
godrik
Niveau 30
09 mars 2018 à 14:44:15

Aussi si c'est un graphe que tu stocke en matrice d'adjacence, on utilise plutot des listes d'adjacence quand le graphe est creux. (Et perso je n'ai jamais rencontre un vrai graphe dense.)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment