[C] pointeur tableau et fonction

Résolu/Fermé
lostprophet Messages postés 7 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 9 janvier 2007 - 27 oct. 2006 à 04:14
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 6 nov. 2006 à 08:34
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)
A voir également:

6 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 oct. 2006 à 08:50
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
0
lostprophet Messages postés 7 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 9 janvier 2007
29 oct. 2006 à 22:27
Merci pour tes remarques ! je teste ca et je tiens au courant !
0
lostprophet Messages postés 7 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 9 janvier 2007
29 oct. 2006 à 22:51
Ca marche !!! merci bien !
0
lostprophet Messages postés 7 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 9 janvier 2007
1 nov. 2006 à 05:42
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 ? ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lostprophet Messages postés 7 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 9 janvier 2007
5 nov. 2006 à 21:53
un petit up

Quelqu'un aurait il une idee pour liberee cette fichue memoire ?

Merci !
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 nov. 2006 à 08:34
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.
0