Realloc dans fonction
nico
-
kazouu Messages postés 466 Statut Membre -
kazouu Messages postés 466 Statut Membre -
Bonjour,
je cherche à copier le contenu d'un fichier dans deux tableaux
void lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
//je fais un realloc, je lis dans un fichier
//jusque là ca marche
}
dans le main je fais un
lire_fic(tabint,tabfloat,&nbint,&nbfloat);
ca me marque erreur de segmentation, normal j'essaye de travailler sur les 2 tableaux
et si je fais
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));
y'a plus d'erreur mais c'est plus le même tableau que celui retourné par la fonction donc il me met que des 0 dans les 2 tableaux.
est-ce que quelqu'un sait comment faire?
je cherche à copier le contenu d'un fichier dans deux tableaux
void lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
//je fais un realloc, je lis dans un fichier
//jusque là ca marche
}
dans le main je fais un
lire_fic(tabint,tabfloat,&nbint,&nbfloat);
ca me marque erreur de segmentation, normal j'essaye de travailler sur les 2 tableaux
et si je fais
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));
y'a plus d'erreur mais c'est plus le même tableau que celui retourné par la fonction donc il me met que des 0 dans les 2 tableaux.
est-ce que quelqu'un sait comment faire?
A voir également:
- Realloc dans fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer dans word - Guide
- Fonction somme excel - Guide
11 réponses
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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));
??
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