Les Allergies
Alimentaires
Posez votre question Signaler

[C] pointeur tableau et fonction [Résolu]

lostprophet 7Messages postés 9 octobre 2006Date d'inscription - Dernière réponse le 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)
Lire la suite 

[C] pointeur tableau et fonction »

6 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour tes remarques ! je teste ca et je tiens au courant !
Ajouter un commentaire
Réponse
+0
moins plus
Ca marche !!! merci bien !
Ajouter un commentaire
Réponse
+0
moins plus
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 ? ;)
Ajouter un commentaire
Réponse
+0
moins plus
un petit up

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

Merci !
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Ce document intitulé « [C] pointeur tableau et fonction » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?