Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

[C] pointeur tableau et fonction

lostprophet, le vendredi 27 octobre 2006 à 04:14:51 
 Signaler ce message aux modérateurs

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)

1

Char Snipeur, le vendredi 27 octobre 2006 à 08:50:38

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 Salutation !
Char Snipeur

Répondre à Char Snipeur

2

lostprophet, le dimanche 29 octobre 2006 à 22:27:17

Merci pour tes remarques ! je teste ca et je tiens au courant !

Répondre à lostprophet

3

lostprophet, le dimanche 29 octobre 2006 à 22:51:12

Ca marche !!! merci bien !

Répondre à lostprophet

4

lostprophet, le mercredi 1 novembre 2006 à 05:42:46

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 ? ;)

Répondre à lostprophet

5

lostprophet, le dimanche 5 novembre 2006 à 21:53:10

Un petit up

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

Merci !

Répondre à lostprophet

6

 Char Snipeur, le lundi 6 novembre 2006 à 08:34:18

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. Salutation !
Char Snipeur

Répondre à Char Snipeur
Pointeur de structure dans fonction C (Résolu) Salut à tous, j'ai une fonction InsereDansListe rien de plus normal qui doit commme son nom l'indique inserer un pointeur vers un element dans une liste. Le probleme c'est que lorsque je passe un pointeur sur une liste vide ou même pleine et que... www.commentcamarche.net/forum/affich-2513913-pointeur-de-structure-dans-fonction-c
Langage C++ - Les pointeurs Comme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition... www.commentcamarche.net/contents/cpp/cpppoint.php3
[C] Pointeur & tableau (Résolu) Bonjour, Je voudrai savoir comment est-il possible de fournir un pointeur de tableau multi dimentionnel dans une fonction ? en effet, dans la norme, main peut avoir un argument char *table[] qui renvoie sur un tableau de tableaux de chars constants... www.commentcamarche.net/forum/affich-1847438-c-pointeur-tableau
Trier un tableau sans utiliser la fonction sortTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle... www.commentcamarche.net/faq/sujet-7685-trier-un-tableau-sans-utiliser-la-fonction-sort
Débutant en C : trier tableau ?Es ce qu'une personne sait comment trier un tableau de valeurs par ordre croissant en langage C ? car je dois initialiser un tableau de 7 valeurs aléatoires en les triant dans l'ordre croissant ds un meme tableau merci davance c urgent www.commentcamarche.net/forum/affich-1063120-debutant-en-c-trier-tableau
Les pointeurs vers des fonctionsbonjour ! voila je suis en train de programmer sous linux et j'ai besoin d'utiliser les pointeurs de fonctions or je ne trouves pas vraiment de doc dessus est ce ke kelkun peut m'expliquer comment déclarer un pointeurs de fonction et comment obtenir... www.commentcamarche.net/forum/affich-1813485-les-pointeurs-vers-des-fonctions
Langage C - jni - tableau à deux dimensionsBonjour, J'ai un problème concernant le passage de paramettre ( tableaux à deux dimensions) en utilisant JNI. En sortie de ma fonction je fais appelle à un constructeurr java qui reçoit en entrée plusieurs tableaux de bytes à deux dimensions. Or les... www.commentcamarche.net/forum/affich-2679971-langage-c-jni-tableau-a-deux-dimensions
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
Les pointeurs en langage CDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des... www.commentcamarche.net/contents/c/cpoint.php3
Les structures en langage CDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de... www.commentcamarche.net/contents/c/cstruct.php3
Langage C - Les fonctionsLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du... www.commentcamarche.net/contents/c/cfonc.php3