Aide problem de compilation

pboscaiolo Messages postés 5 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 15 juillet 2012 - 4 févr. 2012 à 00:48
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 7 févr. 2012 à 14:09
Bonjour j'ai un code avec le code suivant. quand je le compile ca plante, je crois qu'il s'agit d'un probleme d'allocation de memoire.
le fichier duquel je lis les donnees et de la forme suivante.
5
0 | 0 | 0 | 0 | 0
- - - - v - - - -
0 > 0 | 0 | 0 | 3
- - - - - - - - -
0 | 0 < 2 | 0 | 0
- - - - v - - - -
0 | 0 | 0 | 0 | 4
^ - v - - - - - -
0 | 0 | 0 | 0 | 0

je compte sur votre aide. merci d'avance
[CODE]
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char num;
int flag;
}shiki;
shiki **load_dati(char *, int *);
int main()
{
shiki **t;
int n;
t=load_dati("iniziale.txt",&n);

printf("Hello world!\n");
return 0;
}
shiki ** load_dati(char *filename, int *n){
shiki **t;
int num,i,j=0;
char c1;
FILE *f;
if((f=fopen("iniziale.txt","r"))==NULL){
printf("errore apertura");
exit(EXIT_FAILURE);
}
fscanf(f,"%d",&num);

printf("%d",num);
num=2*num-1;

t = (shiki **) malloc (num * sizeof (shiki *));
if (t == NULL) {
printf("problema allocazione memoria\n");
exit(EXIT_FAILURE);
}

for (i=0; i<num; i++) {
t[i] = (shiki *)malloc(num* sizeof (shiki));
if (t[i] == NULL) {
printf("Memory allocation error.\n");
exit(EXIT_FAILURE);
}
for(j=0;j<=num;j++){
fscanf(f,"%c",&c1);
if(c1!=' ' && c1!='\n')
t[i][j].num=c1;
}}
*n=num;
return t;

}[\CODE]

3 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
6 févr. 2012 à 09:20
Hello,
quand je le compile ca plante

hum...faut savoir de quoi on parle quand même...Est-ce que ton programme compile? Est-ce qu'il plante à l'exécution?
Avec-toi programmes-tu? Visual Studio? DevCPP? As-tu des points d'arrêts à ta disposition?

Ah, et merci d'utiliser les balises "code", 3e icone en partant de la droite au dessus de la zone de texte

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 févr. 2012 à 10:47
malloc, malloc en boucles, etc...

pense a appeler un free, hein ^^


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
7 févr. 2012 à 14:09
moi j'aurais mis num*2 dans la boucle j
+ rajout de quelques test (tab, retour chariot)
+ apres appel de la fonction les boucles de nettoyage

for(j=0;j<=num * 2;j++)
{ 
fscanf(f,"%c",&c1); 

if(c1!=' ' && c1!='\n' && c1 != '\r' && c1 != '\t') 
{
printf("\nlecture [c1] = %c", c1);

t[i][j].num = c1; 
}
}



// dans le main apres appel
// FREE
if(t != NULL)
{
for (int i=0; i<n; i++) 
{ 
for(int j=0;j<=n;j++)
{
free(t[i]);
t[i]=NULL;
}
}
printf("\nfree t...\n");
free(t);
}
0
Rejoignez-nous