Realloc dans fonction
Fermé
nico
-
16 juin 2008 à 08:58
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 - 16 juin 2008 à 10:48
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 - 16 juin 2008 à 10:48
A voir également:
- Realloc dans fonction
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer dans word - Guide
- Fonction somme excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
11 réponses
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 09:33
16 juin 2008 à 09:33
tout d'abord si tu as une erreur de segmentation , en général ça vient d'un débordement de mémoire donc tu dois surement vouloir écrire dans une place du tableau non alloué , vérifie les valeurs de &nbint &nbfloat, puis ensuite ta fonction de copie doit faire un transtypage peux tu nous la montrer ?
en fait j'ai fait un
int main()
{
int nbint=0;
int nbfloat=0;
lire_fic(tabint,tabfloat,&nbint,&nbfloat);
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));
...
}
dans lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
FILE *fic;
char* ligne;
fic = fopen (source, "r");
char** ptr=NULL;
char** ptr1=NULL;
ptr = (char **)malloc(sizeof(char *)*2);
char* str;
int lengthfloat=0;
int lengthint=0;
*nbint=0;
*nbfloat=0;
int taille=0;
float f;
//si le fichier est trouve
if (fic)
{
int i=0;
int f=0;
ligne=(char*)malloc(256*sizeof(char));
while (fgets(ligne,256,fic)!= NULL) {
if(ligne!=NULL)
{
ptr1=split(ligne," ",0);
if(!strcmp(ptr1[0],"float")) {
*nbfloat=*nbfloat+1;
} else if(!strcmp(ptr1[0],"int")) {
*nbint=*nbint+1;
}
}
}
printf("int=%d\n",*nbint);
printf("float=%d\n",*nbfloat);
tabfloat=(float*)realloc(tabfloat,*nbfloat*sizeof(float));
tabint=(int*)realloc(tabint,*nbint*sizeof(int));
close(fic);
fic = fopen (source, "r");
while (fgets(ligne,256,fic)!= NULL)
{
if(ligne!=NULL)
{
ptr=split(ligne,"=",0);
ptr1=split(ptr[0]," ",0);
if(!strcmp(ptr1[0],"float")) {
tabfloat[f]=atof(ptr[1]);
printf("%f\n",tabfloat[f]);
f++;
}else {
tabint[i]=atoi(ptr[1]);
printf("%d\n",tabint[i]);
i++;
}
}
taille++;
}
}
close(fic);
}
voilà, c'est tou ce que je fais
int main()
{
int nbint=0;
int nbfloat=0;
lire_fic(tabint,tabfloat,&nbint,&nbfloat);
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));
...
}
dans lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
FILE *fic;
char* ligne;
fic = fopen (source, "r");
char** ptr=NULL;
char** ptr1=NULL;
ptr = (char **)malloc(sizeof(char *)*2);
char* str;
int lengthfloat=0;
int lengthint=0;
*nbint=0;
*nbfloat=0;
int taille=0;
float f;
//si le fichier est trouve
if (fic)
{
int i=0;
int f=0;
ligne=(char*)malloc(256*sizeof(char));
while (fgets(ligne,256,fic)!= NULL) {
if(ligne!=NULL)
{
ptr1=split(ligne," ",0);
if(!strcmp(ptr1[0],"float")) {
*nbfloat=*nbfloat+1;
} else if(!strcmp(ptr1[0],"int")) {
*nbint=*nbint+1;
}
}
}
printf("int=%d\n",*nbint);
printf("float=%d\n",*nbfloat);
tabfloat=(float*)realloc(tabfloat,*nbfloat*sizeof(float));
tabint=(int*)realloc(tabint,*nbint*sizeof(int));
close(fic);
fic = fopen (source, "r");
while (fgets(ligne,256,fic)!= NULL)
{
if(ligne!=NULL)
{
ptr=split(ligne,"=",0);
ptr1=split(ptr[0]," ",0);
if(!strcmp(ptr1[0],"float")) {
tabfloat[f]=atof(ptr[1]);
printf("%f\n",tabfloat[f]);
f++;
}else {
tabint[i]=atoi(ptr[1]);
printf("%d\n",tabint[i]);
i++;
}
}
taille++;
}
}
close(fic);
}
voilà, c'est tou ce que je fais
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 09:59
16 juin 2008 à 09:59
dans ton main a la sorti de lire_fic affiche nbint nbfloat et vérifie si les valeur sont correct
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 10:09
16 juin 2008 à 10:09
c'est une erreur de copie :
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tu as bien mit
float* tabfloat=(float*)malloc(nbfloat*sizeof(float));
int *tabint=(int*)malloc(nbint*sizeof(int));
??
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tu as bien mit
float* tabfloat=(float*)malloc(nbfloat*sizeof(float));
int *tabint=(int*)malloc(nbint*sizeof(int));
??
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 10:33
16 juin 2008 à 10:33
donc c'est ta fonction de copie, peux tu me la joindre je pense savoir ou tu fais l'erreur
je l'ai mise
c'est la fonction lire_fic
d'abord je lis après je copie
pour info nbint et nbfloat était dans le desordre mais ca change rien au probleme
c'est la fonction lire_fic
d'abord je lis après je copie
pour info nbint et nbfloat était dans le desordre mais ca change rien au probleme
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 10:40
16 juin 2008 à 10:40
mais tu fais le malloc après avoir rempli les tableau ????? o_O
ça ne sert strictement a rien
ça ne sert strictement a rien
ah oui tien
ah force de reflechir et de changer des morceaux de programmes
j'écris des trucs absurdes
c'était juste ca ma faute apparemment
merci bien pour ton aide
ah force de reflechir et de changer des morceaux de programmes
j'écris des trucs absurdes
c'était juste ca ma faute apparemment
merci bien pour ton aide
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
16 juin 2008 à 10:48
16 juin 2008 à 10:48
sans probleme,
dans l'ordre tu fais :
- demande des valeur a l'utilisateur
- tu fais tes 2 malloc
- et tu rempli les tableau en faisant attention si les 2 tailles ne sont pas égales
dans l'ordre tu fais :
- demande des valeur a l'utilisateur
- tu fais tes 2 malloc
- et tu rempli les tableau en faisant attention si les 2 tailles ne sont pas égales