[C] pointeur tableau et fonction
Résolu
lostprophet
Messages postés
7
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour !
Je suis en train de programmer en C pour un logiciel, et je me retrouve face a un petit probleme de passage d'argument dans une fonction.
En fait je declare un pointeur de plusieurs entiers, et un pointeur de plusieurs tableaux de 10000 elements. Les elements sont alloues dynamiquement, et les valeurs calculees par une fonction. La fonction marche tres bien pour le pointeurs d'entiers, mais pas pour le pointeur de tableaux (en fait des qu'on sort du cadre du pointeur simple, je suis perdu ;) ) Petite precision, DEFINE_ON_DEMAND est une fonction propre au logiciel, et tout le programme fonctionne fonctionne a part le point que j'evoque.Sinon, ca plante a la compilation (passing arg 3 of 'PrintDetails' from incompatible pointer type)
Voici la fonction:
DEFINE_ON_DEMAND(InjectionTest)
{
int tru=0,j,i;
int NFcen,NFaceID[10000];
int *NFID,N;
NFID=NFaceID;
N=10000;
int *NodeFcen=NULL,(*NodeFaceID)[10000]=NULL;
int total=0;
for(j=39;j<41;j++)
{
ID=j;
tru=0;
if (total==0)
{
NodeFcen = calloc(1,sizeof(int));
NodeFaceID =(int (*)[10000])malloc(10000*1*sizeof(int));
}
else
{
NodeFcen = realloc(NodeFcen, (total+1)*sizeof(int));
NodeFaceID =(int (*)[10000])realloc(NodeFaceID,10000*total*sizeof(int));
}
-
-//Algo qui donne tru=0, ou tru > 1 => fonctionne
-
if(tru >> 1)
{
PrintDetails(ID,&NFcen,&NFID,N);
NodeFcen[total]=NFcen;
for(i=0;i<N;i++)
{
NodeFaceID[total][i]=NFID[i];
}
total++;
}
else{}
}
void PrintDetails(int ID,int *NFcen,int *NFID,int N)
{
int fcen,faceid[10000];
-
-//algo qui calcule fcen et faceid => fonctionne
-
*NFcen=fcen;
for(i=0;i<N;i++)
{
*NFID[i]=faceid[i];
}
}
Merci d'avance ! (ah oui et desole pour les accents, j'ai un clavier qwerty)
Je suis en train de programmer en C pour un logiciel, et je me retrouve face a un petit probleme de passage d'argument dans une fonction.
En fait je declare un pointeur de plusieurs entiers, et un pointeur de plusieurs tableaux de 10000 elements. Les elements sont alloues dynamiquement, et les valeurs calculees par une fonction. La fonction marche tres bien pour le pointeurs d'entiers, mais pas pour le pointeur de tableaux (en fait des qu'on sort du cadre du pointeur simple, je suis perdu ;) ) Petite precision, DEFINE_ON_DEMAND est une fonction propre au logiciel, et tout le programme fonctionne fonctionne a part le point que j'evoque.Sinon, ca plante a la compilation (passing arg 3 of 'PrintDetails' from incompatible pointer type)
Voici la fonction:
DEFINE_ON_DEMAND(InjectionTest)
{
int tru=0,j,i;
int NFcen,NFaceID[10000];
int *NFID,N;
NFID=NFaceID;
N=10000;
int *NodeFcen=NULL,(*NodeFaceID)[10000]=NULL;
int total=0;
for(j=39;j<41;j++)
{
ID=j;
tru=0;
if (total==0)
{
NodeFcen = calloc(1,sizeof(int));
NodeFaceID =(int (*)[10000])malloc(10000*1*sizeof(int));
}
else
{
NodeFcen = realloc(NodeFcen, (total+1)*sizeof(int));
NodeFaceID =(int (*)[10000])realloc(NodeFaceID,10000*total*sizeof(int));
}
-
-//Algo qui donne tru=0, ou tru > 1 => fonctionne
-
if(tru >> 1)
{
PrintDetails(ID,&NFcen,&NFID,N);
NodeFcen[total]=NFcen;
for(i=0;i<N;i++)
{
NodeFaceID[total][i]=NFID[i];
}
total++;
}
else{}
}
void PrintDetails(int ID,int *NFcen,int *NFID,int N)
{
int fcen,faceid[10000];
-
-//algo qui calcule fcen et faceid => fonctionne
-
*NFcen=fcen;
for(i=0;i<N;i++)
{
*NFID[i]=faceid[i];
}
}
Merci d'avance ! (ah oui et desole pour les accents, j'ai un clavier qwerty)
6 réponses
-
Salut.
Je pense avoir vu une erreur.
Le '&' ça sert à renvoyer l'adresse d'une variable. Donc quand tu écrit :
PrintDetails(ID,&NFcen,&NFID,N)
avec NFID déclaer comme int*, c'est comme si tu passai un int**
Or ce n'est pas ce que PrintDetails attend.
de même pour une tableau, soit tu marque NFID[i], soit *(NFID+i); mais pas *NFID[i], ce qui revient à faire une indirection sur un int. Que renvérai l'expression "*15" ?
En plus, pointeur d'entier, pointeur de tableaux, je pense que c'est à pareil dans ton cas.
regarde ça, ça peut t'aider:
c liberation de la memoire -
Merci pour tes remarques ! je teste ca et je tiens au courant !
-
-
Bon en fatit maintenant je suis bloque, je n'arrive pas a desallouer la memoire pour NodeFaceID avec free().
J'ai tente une boucle for:
for i .....
free(NodeFaceID[i]);
mais je me retrouve avec une erreure de glibc.... une idee encore ? ;) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
un petit up
Quelqu'un aurait il une idee pour liberee cette fichue memoire ?
Merci ! -
Salut.
je m'y connai pas beaucoup en allocartion dynamique.
Déjà, met l'erreur exact, 9/10 la réponse est dans l'affichage de l'erreur.
si NodeFaceID est bien de type int**, ce que tu as écris me semble juste.