Comment retourner un pointeur ?

Fermé
dimcolmx Messages postés 1 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 15 novembre 2007 - 15 nov. 2007 à 18:11
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 23 nov. 2007 à 09:59
-------------------------------------------------------------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.
A voir également:

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!
1
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
15 nov. 2007 à 18:26
Je vois au moins un problème, au moment ou tu fais ton malloc :
 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
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
23 nov. 2007 à 09:59
Oulala mais on vous a pas appris à faire un makefile ?
http://www-ext.impmc.jussieu.fr/impmc/Enseignement/ye/informatique/unix/documents/makefile.html

Dans ton cas il faut faire
gcc -W -Wall -c tableauDynEnt.c 
gcc -W -Wall tableauDynEnt.o main.c

Bonne chance
0