2009-04-29 11 views
1

J'ai un comportement curieux dans un programme C. Je passe quelques arguments à une fonction avec la signature suivante dans un fichier appelé foo.c:C: Raisons pour lesquelles un paramètre passé est NULL après l'appel de la fonction à un module différent

foo (char *first, size_t a, size_t b, size_t c, char *last); 

Maintenant, quand je l'appelle cette fonction à partir d'un autre fichier C qui comprend foo.h, par exemple avec:

foo("first value", 1, 2, 3, "last value"); 

dans foo d'abord, a, b, c sont corrects mais le dernier est toujours NULL. Peu importe le type de type que j'utilise comme dernier paramètre ni d'où j'appelle cette fonction (même directement dans le main sans opérations précédentes). Les fichiers sont compilés et liés ensemble dans un exécutable. Lorsque je mets foo() dans le même fichier source d'où il est appelé tout fonctionne.

Quelqu'un a-t-il une idée de ce qui pourrait être la raison pour laquelle, lorsque la fonction est sous-traitée, le dernier paramètre est NULL?

+1

Quelle est la signature dans foo.h? – dsm

+0

Montrez votre code. Pourquoi pensez-vous que la dernière est nulle? Vous semblez le passer au sens littéral. – tpdi

+0

Avez-vous assuré que le prototype de fonction de foo.h est correct? – Noldorin

Répondre

2

Sans voir le code, je suppose que votre déclaration de fonction (dans l'en-tête) est détraquée par la définition (dans le fichier source).

0

merci pour les réponses rapides, l'indice de

litb était correcte. Dans un autre fichier d'en-tête j'ai manqué d'inclure size_t a été redéfini. Donc, fondamentalement, un fichier source utilisait un 32 bits et un autre un type de données 64 bits size_t.

(impossible de poster de code parce que le client est un peu icky avec ça)