Sur le pointeur null en C et les fichiers .h
Fermé
Yacouba
Messages postés
48
Date d'inscription
samedi 25 mai 2002
Statut
Membre
Dernière intervention
6 janvier 2006
-
8 mai 2004 à 11:24
bob - 5 déc. 2007 à 11:54
bob - 5 déc. 2007 à 11:54
A voir également:
- Que veut dire vendu par null
- Null facebook - Forum Facebook
- Null messenger ✓ - Forum MSN / WLM
- Que signifie vendu par null - Astuces et Solutions
4 réponses
Fu Xuen
Messages postés
3642
Date d'inscription
jeudi 24 avril 2003
Statut
Contributeur
Dernière intervention
11 septembre 2005
305
8 mai 2004 à 12:00
8 mai 2004 à 12:00
Salut,
1) Dans mes souvenirs, le C fait en sorte que rien ne se trouve à l'adresse 0 ; un pointeur générique vers cette adresse ne pointe donc sur rien. Dans la bibliothèque standard <stddef.h>, il est effectivement défini comme suit :
2) L'implémentation d'une fonction est dans un fichier .c, qui déclare dans son entête le fichier .h où se trouve le prototype.
-= Fu Xuen =-
1) Dans mes souvenirs, le C fait en sorte que rien ne se trouve à l'adresse 0 ; un pointeur générique vers cette adresse ne pointe donc sur rien. Dans la bibliothèque standard <stddef.h>, il est effectivement défini comme suit :
#define NULL ((void*) 0)
2) L'implémentation d'une fonction est dans un fichier .c, qui déclare dans son entête le fichier .h où se trouve le prototype.
-= Fu Xuen =-
Ravachol
Messages postés
566
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
30 octobre 2005
120
8 mai 2004 à 12:08
8 mai 2004 à 12:08
Salut,
1: Ce qu'il faut savoir et qui est suffisant dans un premier temps, je pense, c'est que toutes les implémentations de C te garantisent qu'en affectant NULL à un pointeur celui ne pointera sur aucune adresse physique valide.
2: C'est normal que tu ne trouves pas la définition d'une fonction dans un header car celui ci n'est pas fait pour ça. Il ne doit contenir que le prototype des fonctions, variables, structures, etc que tu souhaites exporter. Tu dois trouver les définitions dans un fichier .c, ex: tonUnite.h contient les déclarations, tonUnite.c contient les définitions.
A++
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
1: Ce qu'il faut savoir et qui est suffisant dans un premier temps, je pense, c'est que toutes les implémentations de C te garantisent qu'en affectant NULL à un pointeur celui ne pointera sur aucune adresse physique valide.
2: C'est normal que tu ne trouves pas la définition d'une fonction dans un header car celui ci n'est pas fait pour ça. Il ne doit contenir que le prototype des fonctions, variables, structures, etc que tu souhaites exporter. Tu dois trouver les définitions dans un fichier .c, ex: tonUnite.h contient les déclarations, tonUnite.c contient les définitions.
A++
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
Fu Xuen
Messages postés
3642
Date d'inscription
jeudi 24 avril 2003
Statut
Contributeur
Dernière intervention
11 septembre 2005
305
8 mai 2004 à 12:23
8 mai 2004 à 12:23
J'suis preum's :P.
-= Fu Xuen =-
-= Fu Xuen =-
Ravachol
Messages postés
566
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
30 octobre 2005
120
>
Fu Xuen
Messages postés
3642
Date d'inscription
jeudi 24 avril 2003
Statut
Contributeur
Dernière intervention
11 septembre 2005
8 mai 2004 à 12:52
8 mai 2004 à 12:52
Salut,
Ouais désolé pour le doublon ;-)
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
Ouais désolé pour le doublon ;-)
Sans dieu c'est le néant, avec dieu c'est le néant suprême
SEBASTIEN FAURE.
Fu Xuen
Messages postés
3642
Date d'inscription
jeudi 24 avril 2003
Statut
Contributeur
Dernière intervention
11 septembre 2005
305
>
Fu Xuen
Messages postés
3642
Date d'inscription
jeudi 24 avril 2003
Statut
Contributeur
Dernière intervention
11 septembre 2005
8 mai 2004 à 14:18
8 mai 2004 à 14:18
Pas de problème, ça veut dire que tu as pris la peine de soigner la rédaction de ton message :). Et puis tu es un peu plus précis.
-= Fu Xuen =-
-= Fu Xuen =-
NULL vaut 0
c'est UNE adresse
quelle soit valide ou non en mémoire c'est pas ton problème
PAR CONTRE tu dois blinder tes fonctions pour ne pas utiliser de pointeur qui vaut NULL
exemple
en C:
void freeSecurise(int* p) {
if (p!=NULL)
free(p);
}
en C++:
void freeSecurise(int*& p) {
if (p!=NULL) {
free(p);
p = NULL;
}
}
c'est UNE adresse
quelle soit valide ou non en mémoire c'est pas ton problème
PAR CONTRE tu dois blinder tes fonctions pour ne pas utiliser de pointeur qui vaut NULL
exemple
en C:
void freeSecurise(int* p) {
if (p!=NULL)
free(p);
}
en C++:
void freeSecurise(int*& p) {
if (p!=NULL) {
free(p);
p = NULL;
}
}