axelle3003 | Bonjour, Je souhaiterais comprendre un programme qui s’exécute très bien sur un premier ordinateur mais ne peut pas s''exécuter sur un autre ordinateur de même environnement.
En effet, après avoir compiler et exécuter un programme, j'ai copié ce dernier via une clé sur mon ordinateur. Je l'ai compilé, tout se passe bien mais lorsque je veux l’exécuter, Le message d'erreur est "ERREUR SEGMENTATION (core dumped).
J'ai essayé d’autres programme qui fonctionnaient déjà sur mon ordinateur et tout va bien.
Quelqu'un aurait une idée ?
Je vous joins mon programme qui se lit via un fichier de structure et un fichier de fonction et qui est incrémenté par un fichier texte de données.
Fichier "liste_structures.h"
Code :
- typedef struct espece {
- char nom_espece[20];
- } ESPECE;
- typedef struct historique {
- int* abondance_sp;
- float biomasse_totale;
- float cout_total;
- struct historique* nxt;
- } HIST;
- typedef struct choix_espece {
- char nom[20];
- int nb_choix;
- struct choix_espece *nxt;
- } CE;
- /*typedef struct result_ab {
- int* abondance;
- } RES;*/
- typedef struct statistiques {
- float moyenne;
- float var;
- int val_max;
- int val_min;
- } STAT;
- typedef struct Etat_Initial {
- int nb_sp;
- ESPECE* tab_espece;
- int* abondances;
- int* seuil;
- int* seuil_critique;
- float* biomasse;
- float* cout;
- float Bio_tot;
- float Cout_tot;
- float** interactions;
- } EI;
|
Fichier Fonctions "creer_etat.c"
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "liste_structures.h"
- EI creer_etat(EI etat)
- {
- int nb_sp, i, j;
- FILE *milieu_marin;
- milieu_marin = fopen ("fichier_test2.txt","r" );
- /* Je scanne d'abord le premier nombre qui est le nombre d'espèces dans le milieu */
- fscanf(milieu_marin,"%d",&etat.nb_sp);
- nb_sp = etat.nb_sp;
- etat.tab_espece = (ESPECE*)malloc(nb_sp*sizeof(ESPECE));
- etat.abondances = (int*)malloc(nb_sp*sizeof(int));
- etat.seuil = (int*)malloc(nb_sp*sizeof(int));
- etat.seuil_critique = (int*)malloc(nb_sp*sizeof(int));
- etat.biomasse = (float*)malloc(nb_sp*sizeof(float));
- etat.cout = (float*)malloc(nb_sp*sizeof(float));
- etat.interactions = (float**)malloc(nb_sp*sizeof(float));
- float** temp = etat.interactions;
- for (i=0; i<nb_sp; i++)
- {
- *temp = (float*)malloc(nb_sp*sizeof(float));
- temp++;
- }
- for (i=0; i<nb_sp; i++)
- {
- fscanf(milieu_marin,"%s", etat.tab_espece[i].nom_espece);
- fscanf(milieu_marin,"%d", &etat.abondances[i]);
- fscanf(milieu_marin,"%d", &etat.seuil[i]);
- fscanf(milieu_marin,"%d", &etat.seuil_critique[i]);
- fscanf(milieu_marin,"%f", &etat.biomasse[i]);
- fscanf(milieu_marin,"%f", &etat.cout[i]);
- }
- fscanf(milieu_marin,"%f", &etat.Bio_tot);
- fscanf(milieu_marin,"%f", &etat.Cout_tot);
- for (i=0; i<nb_sp; i++)
- {
- for (j=0; j<nb_sp; j++)
- {
- fscanf(milieu_marin,"%f", &etat.interactions[i][j]);
- }
- }
- fclose(milieu_marin);
- return etat;
- }
|
Fichier "creer_etat.h"
Code :
- EI creer_etat(EI etat);
|
Fichier Foncions "affiche_tableau.c"
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include "liste_structures.h"
- int i, j;
- /* Fonction qui permet d'afficher les tableaux d'entiers */
- void aff_tab_entier(int* tableau, ESPECE* tab_sp, int nb_sp)
- {
- for (i=0; i<nb_sp; i++)
- printf("%s : %d\n",tab_sp[i].nom_espece, tableau[i]);
- }
- /* Fonction qui permet d'afficher les tableaux de réels*/
- void aff_tab_reel(float* tableau, ESPECE* tab_sp, int nb_sp)
- {
- for (i=0; i<nb_sp; i++)
- printf("%s : %g\n",tab_sp[i].nom_espece, tableau[i]);
- }
- /* Fonction qui permet d'afficher les tableaux de réels (double)*/
- void aff_tab_dbl(double* tableau, ESPECE* tab_sp, int nb_sp)
- {
- for (i=0; i<nb_sp; i++)
- printf("%s : %lf\n",tab_sp[i].nom_espece, tableau[i]);
- }
- /* Fonction qui permet d'afficher les matrices */
- void aff_matrice(float tableau[5][5])
- {
- ESPECE tab_espece[5]= {"Phytoplancton", "Crevettes", "Maquereaux", "Requins", "Oursins"};
- for (i=0; i<5; i++)
- {
- for (j=0; j<5; j++){
- if (tab_espece[i].nom_espece != tab_espece[j].nom_espece)
- printf("%s -> %s = %.1f\n",tab_espece[i].nom_espece, tab_espece[j].nom_espece, tableau[i][j]);}
- printf("\n" );
- }
- }
|
Fichier "affiche_tableau.h"
Code :
- void aff_tab_entier(int* tableau, ESPECE* tab_sp, int nb_sp);
- void aff_tab_reel(float* tableau, ESPECE* tab_sp, int nb_sp);
- void aff_tab_dbl(double* tableau, ESPECE* tab_sp, int nb_sp);
|
Mon programme Principal "test2.c
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "liste_structures.h"
- #include "affiche_tableau.h"
- #include "creer_etat.h"
- int main()
- {
- EI etat;
- int i, j;
- etat = creer_etat(etat);
- aff_tab_entier (etat.abondances, etat.tab_espece, etat.nb_sp);
- aff_tab_entier (etat.seuil, etat.tab_espece, etat.nb_sp);
- aff_tab_entier (etat.seuil_critique, etat.tab_espece, etat.nb_sp);
- aff_tab_reel (etat.biomasse, etat.tab_espece, etat.nb_sp);
- aff_tab_reel (etat.cout, etat.tab_espece, etat.nb_sp);
- for (i=0; i<etat.nb_sp; i++)
- {
- for (j=0; j<etat.nb_sp; j++){
- if (etat.tab_espece[i].nom_espece != etat.tab_espece[j].nom_espece)
- printf("%s -> %s = %.1f\n",etat.tab_espece[i].nom_espece, etat.tab_espece[j].nom_espece, etat.interactions[i][j]);}
- printf("\n" );
- }
- return 0;
- }
|
Pour finir mon fichier de données "Fichier_test2.txt"
Code :
- 8
- Phytoplancton 10000000 5000 800 0.00001 0.000001
- Crevettes 100000 1000 200 12 2
- Maquereaux 2500 500 100 750 50
- Requins 100 20 5 1000000 200
- Oursins 7000 3000 70 40 15
- Coral 10000000 5000 800 0.00001 0.000001
- Algues 100000 1000 200 12 2
- Bigorneaux 2500 500 100 750 50
- 0
- 0
- 0 1 -0.4 -0.1 0.1 2 2 2
- -0.4 0 1 -0.3 -0.4 2 2 2
- 0.3 -0.5 0 1 -0.1 2 2 2
- -0.5 -0.3 -0.5 0 0.3 2 2 2
- -0.1 -0.4 -0.2 -0.9 0 2 2 2
- 2 2 2 2 2 2 2 2
- 2 2 2 2 2 2 2 2
- 2 2 2 2 2 2 2 2
|
MErci d'avance pour votre aide.
Axelle
|