Comment retourner un pointeur ?
-------------------------------------------------------------FICHIER tableauDynEnt.h ----------------------------------------
typedef struct tableauDynEnt * tableauDynEnt;
------------------------------------------------------------ FICHIER tabDynamique.c---------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "tableauDynEnt.h"
struct tableauDynEnt
{
int *tab;
int taille;
int increment_nbelements;
};
tableauDynEnt tableauDynEnt_cree(int nb_elements_max, int increment_nbelements)
{
if( nb_elements_max > 0 && increment_nbelements > 0 )
{
tableauDynEnt p = (tableauDynEnt) malloc(sizeof(struct tableauDynEnt));
if(p){
p->tab = malloc(nb_elements_max*sizeof(int));
p->taille = nb_elements_max;
p->increment_nbelements = increment_nbelements;
return p;
} else return NULL;
}
Lorsque je compile mon fichier tabDynamique.c avec GCC j'ai le message ci dessous:
non d�ini premier r��enc�
symbole dans le fichier
main /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.6/crt1.o
tableauDynEnt_nbElements /var/tmp/ccpckCrZ.o
ld: fatal : Erreurs de r��ence aux symboles. Aucun r�ultat �rit dans l
collect2: ld a retourn�1 code d'�at d'ex�ution
Il me semble que mon code est correct mais j'ai peut être mal fait quelque chose.
typedef struct tableauDynEnt * tableauDynEnt;
------------------------------------------------------------ FICHIER tabDynamique.c---------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "tableauDynEnt.h"
struct tableauDynEnt
{
int *tab;
int taille;
int increment_nbelements;
};
tableauDynEnt tableauDynEnt_cree(int nb_elements_max, int increment_nbelements)
{
if( nb_elements_max > 0 && increment_nbelements > 0 )
{
tableauDynEnt p = (tableauDynEnt) malloc(sizeof(struct tableauDynEnt));
if(p){
p->tab = malloc(nb_elements_max*sizeof(int));
p->taille = nb_elements_max;
p->increment_nbelements = increment_nbelements;
return p;
} else return NULL;
}
Lorsque je compile mon fichier tabDynamique.c avec GCC j'ai le message ci dessous:
non d�ini premier r��enc�
symbole dans le fichier
main /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.6/crt1.o
tableauDynEnt_nbElements /var/tmp/ccpckCrZ.o
ld: fatal : Erreurs de r��ence aux symboles. Aucun r�ultat �rit dans l
collect2: ld a retourn�1 code d'�at d'ex�ution
Il me semble que mon code est correct mais j'ai peut être mal fait quelque chose.
A voir également:
- Comment retourner un pointeur ?
- Retourner ecran pc - Guide
- Comment retourner une video - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
3 réponses
Bonjour,
Je fais exactement le même TP que toi :) :)
Et j'ai eu le même problème tantôt... d'ou ma présence ici !
La solution (enfin, je crois!)
Étant donnée que ton module tableauDynEnt.c et tableauDynEnt.h ne contient pas de fonction MAIN, tu ne dois pas faire de link avec gcc.
Seulement faire une compilation : gcc -c tableauDynEnt.c
Essaie ça pour voir :)
Bonne soirée!
Je fais exactement le même TP que toi :) :)
Et j'ai eu le même problème tantôt... d'ou ma présence ici !
La solution (enfin, je crois!)
Étant donnée que ton module tableauDynEnt.c et tableauDynEnt.h ne contient pas de fonction MAIN, tu ne dois pas faire de link avec gcc.
Seulement faire une compilation : gcc -c tableauDynEnt.c
Essaie ça pour voir :)
Bonne soirée!
Je vois au moins un problème, au moment ou tu fais ton malloc :
Du coup ta fonction est sensé retourner un tableauDynEnt * :
Afin d'éviter un contrôle des paramètres nb_elements_max, increment_nbelements tu peux directement utiliser des unsigned int :
Bonne chance
tableauDynEnt *p = (tableauDynEnt *) malloc(sizeof(struct tableauDynEnt));
Du coup ta fonction est sensé retourner un tableauDynEnt * :
tableauDynEnt *tableauDynEnt_cree(int nb_elements_max, int increment_nbelements){
...
}
Afin d'éviter un contrôle des paramètres nb_elements_max, increment_nbelements tu peux directement utiliser des unsigned int :
tableauDynEnt *tableauDynEnt_cree(unsigned nb_elements_max,unsigned increment_nbelements){
...
}
Bonne chance