bonjour
je debute en c++ et j`ai un soucis avec les allocations dynamiques de
tableaux
je suis sous window avec vc++
voici un resume de mon code :
int main() {
Le Mon, 03 May 2004 11:59:20 +0200, Laurent Hamery a écrit :
bonjour je debute en c++ et j`ai un soucis avec les allocations dynamiques de tableaux je suis sous window avec vc++ voici un resume de mon code : int main() {
int blockSize 0;
ok
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code. Par contre, il faut se méfier de ce genre d'initialisation suivant le système sur lequel ça va tourner. Si le programme est stocké dans une ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc se retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise :)
buffer2 = new char[blockSize];
ok
int sizeOfReturn = strlen(buffer2);
Aïe aïe aïe !!!! strlen retourne la longueur d'une chaîne à ZERO TERMINAL ! Or votre chaîne n'est pas initialisée, en effet le new se contente de retourner un bloc mémoire, qui peut contenir des valeurs tout à fait aléatoires !
Donc vous avez alloué une zone mémoire contenant des valeurs aléatoires, mais pas de zéro. En revanche, 5 octets après la fin de votre bloc s'en trouvait un qui valait zéro.
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Le Mon, 03 May 2004 11:59:20 +0200, Laurent Hamery a écrit :
bonjour
je debute en c++ et j`ai un soucis avec les allocations dynamiques de
tableaux
je suis sous window avec vc++
voici un resume de mon code :
int main() {
int blockSize 0;
ok
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à
NULL. Les pointilleux diront que c'est la même chose, et d'autres
pointilleux diront que par contre ça améliore la clarté du code.
Par contre, il faut se méfier de ce genre d'initialisation suivant le
système sur lequel ça va tourner. Si le programme est stocké dans une
ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc se
retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise :)
buffer2 = new char[blockSize];
ok
int sizeOfReturn = strlen(buffer2);
Aïe aïe aïe !!!!
strlen retourne la longueur d'une chaîne à ZERO TERMINAL !
Or votre chaîne n'est pas initialisée, en effet le new se contente
de retourner un bloc mémoire, qui peut contenir des valeurs tout à fait
aléatoires !
Donc vous avez alloué une zone mémoire contenant des valeurs
aléatoires, mais pas de zéro. En revanche, 5 octets après la fin de
votre bloc s'en trouvait un qui valait zéro.
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
Le Mon, 03 May 2004 11:59:20 +0200, Laurent Hamery a écrit :
bonjour je debute en c++ et j`ai un soucis avec les allocations dynamiques de tableaux je suis sous window avec vc++ voici un resume de mon code : int main() {
int blockSize 0;
ok
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code. Par contre, il faut se méfier de ce genre d'initialisation suivant le système sur lequel ça va tourner. Si le programme est stocké dans une ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc se retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise :)
buffer2 = new char[blockSize];
ok
int sizeOfReturn = strlen(buffer2);
Aïe aïe aïe !!!! strlen retourne la longueur d'une chaîne à ZERO TERMINAL ! Or votre chaîne n'est pas initialisée, en effet le new se contente de retourner un bloc mémoire, qui peut contenir des valeurs tout à fait aléatoires !
Donc vous avez alloué une zone mémoire contenant des valeurs aléatoires, mais pas de zéro. En revanche, 5 octets après la fin de votre bloc s'en trouvait un qui valait zéro.
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Laurent Hamery
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
merci pour cette reponse si rapide :)
effectivement j`avais oublier cette histoire de ' '
si je rajoute
buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
merci pour cette reponse si rapide :)
Jean-Marc Bourguet
"Laurent Hamery" writes:
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Laurent Hamery" <lhamery@yahoo.fr> writes:
effectivement j`avais oublier cette histoire de ' '
si je rajoute
buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Florent 'flure' C.
Le Mon, 03 May 2004 12:27:45 +0200, Laurent Hamery a écrit :
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :) Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des plantages voire pire ... N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N éléments, le premier sera buffer2[0] et le dernier buffer2[N-1] Donc tu aurais du mettre buffer2[blockSize-1] = ' '; Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Le Mon, 03 May 2004 12:27:45 +0200, Laurent Hamery a écrit :
effectivement j`avais oublier cette histoire de ' '
si je rajoute
buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :)
Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des
plantages voire pire ...
N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N
éléments, le premier sera buffer2[0] et le dernier buffer2[N-1]
Donc tu aurais du mettre buffer2[blockSize-1] = ' ';
Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est
occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
Le Mon, 03 May 2004 12:27:45 +0200, Laurent Hamery a écrit :
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :) Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des plantages voire pire ... N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N éléments, le premier sera buffer2[0] et le dernier buffer2[N-1] Donc tu aurais du mettre buffer2[blockSize-1] = ' '; Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
kanze
"Florent 'flure' C." wrote in message news:...
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Par contre, il faut se méfier de ce genre d'initialisation suivant le système sur lequel ça va tourner. Si le programme est stocké dans une ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc se retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise :)
Ça, j'aimerais bien le voir. D'abord, évidemment, parce que son pointeur n'est pas déclaré const -- il a donc tout à fait droit à le modifier tant qu'il veut. Et aussi, parce que son pointeur, c'est une variable locale, sur la pile -- j'aimerais bien savoir comment fonctionnerait un programme dont la pile est en ROM.
Je me suis bien servi d'un compilateur qui réfusait l'initialisation d'une variable globale non-const. Mais tout ce qu'il acceptait marchait comme prévu ; c'était jusqu'il y avait une chose dans la norme qu'il ne supportait pas.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
"Florent 'flure' C." <flurePASDESPAM@freePASDESPAM.fr> wrote in message
news:<pan.2004.05.03.10.10.00.741699@freePASDESPAM.fr>...
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à
NULL. Les pointilleux diront que c'est la même chose, et d'autres
pointilleux diront que par contre ça améliore la clarté du code.
Par contre, il faut se méfier de ce genre d'initialisation suivant le
système sur lequel ça va tourner. Si le programme est stocké dans une
ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc
se retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise
:)
Ça, j'aimerais bien le voir. D'abord, évidemment, parce que son pointeur
n'est pas déclaré const -- il a donc tout à fait droit à le modifier
tant qu'il veut. Et aussi, parce que son pointeur, c'est une variable
locale, sur la pile -- j'aimerais bien savoir comment fonctionnerait un
programme dont la pile est en ROM.
Je me suis bien servi d'un compilateur qui réfusait l'initialisation
d'une variable globale non-const. Mais tout ce qu'il acceptait marchait
comme prévu ; c'était jusqu'il y avait une chose dans la norme qu'il ne
supportait pas.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Par contre, il faut se méfier de ce genre d'initialisation suivant le système sur lequel ça va tourner. Si le programme est stocké dans une ROM par exemple, buffer2 pourrait être initialisé à 0 en ROM et donc se retrouver inutilisable !! (j'ai déjà eu ce cas précis, je précise :)
Ça, j'aimerais bien le voir. D'abord, évidemment, parce que son pointeur n'est pas déclaré const -- il a donc tout à fait droit à le modifier tant qu'il veut. Et aussi, parce que son pointeur, c'est une variable locale, sur la pile -- j'aimerais bien savoir comment fonctionnerait un programme dont la pile est en ROM.
Je me suis bien servi d'un compilateur qui réfusait l'initialisation d'une variable globale non-const. Mais tout ce qu'il acceptait marchait comme prévu ; c'était jusqu'il y avait une chose dans la norme qu'il ne supportait pas.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Loïc Joly
Florent 'flure' C. wrote:
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :) Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des plantages voire pire ... N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N éléments, le premier sera buffer2[0] et le dernier buffer2[N-1] Donc tu aurais du mettre buffer2[blockSize-1] = ' '; Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
Et encore, c'est insuffisant... Si par hasard, le 42ème élément de son
bloc mémoire contenait 0, ça donnerait un résultat différent de 100.
-- Loïc
Florent 'flure' C. wrote:
effectivement j`avais oublier cette histoire de ' '
si je rajoute
buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :)
Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des
plantages voire pire ...
N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N
éléments, le premier sera buffer2[0] et le dernier buffer2[N-1]
Donc tu aurais du mettre buffer2[blockSize-1] = ' ';
Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est
occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
Et encore, c'est insuffisant... Si par hasard, le 42ème élément de son
bloc mémoire contenait 0, ça donnerait un résultat différent de 100.
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Tu as vraiment besoin d'un bon cours sur les pointeurs :) Ici, tu écris un octet après la fin de ton bloc, ce qui peut causer des plantages voire pire ... N'oublie pas qu'en C(++) on compte à partir de 0, donc si tu alloues N éléments, le premier sera buffer2[0] et le dernier buffer2[N-1] Donc tu aurais du mettre buffer2[blockSize-1] = ' '; Et à la fin strlen te renverrais 99 et non 100, puisqu'une case est occuppée par ton délimiteur de fin de chaîne (le zéro terminal)
Et encore, c'est insuffisant... Si par hasard, le 42ème élément de son
bloc mémoire contenait 0, ça donnerait un résultat différent de 100.
-- Loïc
Jean-Noël Mégoz
a écrit dans le message de news:
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0405030638.5c6a4909@posting.google.com...
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à
NULL. Les pointilleux diront que c'est la même chose, et d'autres
pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que
l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt
qu'avec NULL, comme on le fait en C !...
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
Jean-Noël Mégoz
"Jean-Marc Bourguet" a écrit dans le message de news:
"Laurent Hamery" writes:
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
D'où la règle lorsqu'on crée un chaîne de 'taille' caractère :
myString = new char[taille + 1] ; Le remplissage de la chaîne (avec un strcpy(myString , src) ou un myString "...") se charge alors du 0 en fin de chaîne.
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de
news:pxbsmehn536.fsf@news.bourguet.org...
"Laurent Hamery" <lhamery@yahoo.fr> writes:
effectivement j`avais oublier cette histoire de ' '
si je rajoute
buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
D'où la règle lorsqu'on crée un chaîne de 'taille' caractère :
myString = new char[taille + 1] ;
Le remplissage de la chaîne (avec un strcpy(myString , src) ou un myString "...") se charge alors du 0 en fin de chaîne.
"Jean-Marc Bourguet" a écrit dans le message de news:
"Laurent Hamery" writes:
effectivement j`avais oublier cette histoire de ' ' si je rajoute buffer2[blockSize] = ' '; alors a la fin j`ai bien 100
Surtout tu modifies en dehors de ce que tu as alloue.
D'où la règle lorsqu'on crée un chaîne de 'taille' caractère :
myString = new char[taille + 1] ; Le remplissage de la chaîne (avec un strcpy(myString , src) ou un myString "...") se charge alors du 0 en fin de chaîne.
Horst Kraemer
On Tue, 4 May 2004 23:02:25 +0200, "Jean-Noël Mégoz" wrote:
a écrit dans le message de news:
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
En C et en C++
p = 0; et p = NULL;
sont corrects les deux.
Peut-etre tu as mal compris le prof ou le prof c'est mal exprimé ou c'est un mauvais prof et il faut changer le prof.
La vérité est que beaucoup de programmeurs C++ préfèrent 0 et beaucoup de programmeurs C préfèrent NULL.
-- Horst
On Tue, 4 May 2004 23:02:25 +0200, "Jean-Noël Mégoz"
<nospam_jnmegoz@infonie.fr> wrote:
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0405030638.5c6a4909@posting.google.com...
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à
NULL. Les pointilleux diront que c'est la même chose, et d'autres
pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que
l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt
qu'avec NULL, comme on le fait en C !...
En C et en C++
p = 0;
et
p = NULL;
sont corrects les deux.
Peut-etre tu as mal compris le prof ou le prof c'est mal exprimé ou
c'est un mauvais prof et il faut changer le prof.
La vérité est que beaucoup de programmeurs C++ préfèrent 0 et beaucoup
de programmeurs C préfèrent NULL.
On Tue, 4 May 2004 23:02:25 +0200, "Jean-Noël Mégoz" wrote:
a écrit dans le message de news:
char *buffer2 = 0;
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
En C et en C++
p = 0; et p = NULL;
sont corrects les deux.
Peut-etre tu as mal compris le prof ou le prof c'est mal exprimé ou c'est un mauvais prof et il faut changer le prof.
La vérité est que beaucoup de programmeurs C++ préfèrent 0 et beaucoup de programmeurs C préfèrent NULL.
-- Horst
Michel Michaud
Dans news:4098034d$0$13078$, Jean-Noël
a écrit dans le message de news:
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
D'autres pointilleux diront que ça cache la vérité et que ça n'améliore rien.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
Ne pas oublier le cas qui montre que cacher la vérité n'est pas toujours bonne.
void F(int n) { cout << "Ben voyons !"; }
void F(char *p) { cout << "Évidemment ?"; }
F(NULL);
Ce cas n'est pas vraiment possible en C, ce qui peut expliquer que NULL n'y ait pas aussi mauvaise presse...
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:4098034d$0$13078$636a15ce@news.free.fr, Jean-Noël
<kanze@gabi-soft.fr> a écrit dans le message de
news:d6652001.0405030638.5c6a4909@posting.google.com...
Très bien, l'initialisation du pointeur, mais je le mettrai
plutôt à NULL. Les pointilleux diront que c'est la même
chose, et d'autres pointilleux diront que par contre ça
améliore la clarté du code.
D'autres pointilleux diront que ça cache la vérité et que ça
n'améliore rien.
Je travaille moi aussi le C++ avec un cours où il est dit que
l'initialisation à 0 du pointeur est ce qui doit être fait en
C++, plutôt qu'avec NULL, comme on le fait en C !...
Ne pas oublier le cas qui montre que cacher la vérité n'est pas
toujours bonne.
void F(int n)
{
cout << "Ben voyons !";
}
void F(char *p)
{
cout << "Évidemment ?";
}
F(NULL);
Ce cas n'est pas vraiment possible en C, ce qui peut expliquer
que NULL n'y ait pas aussi mauvaise presse...
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Très bien, l'initialisation du pointeur, mais je le mettrai plutôt à NULL. Les pointilleux diront que c'est la même chose, et d'autres pointilleux diront que par contre ça améliore la clarté du code.
D'autres pointilleux diront que ça cache la vérité et que ça n'améliore rien.
Je travaille moi aussi le C++ avec un cours où il est dit que l'initialisation à 0 du pointeur est ce qui doit être fait en C++, plutôt qu'avec NULL, comme on le fait en C !...
Ne pas oublier le cas qui montre que cacher la vérité n'est pas toujours bonne.
void F(int n) { cout << "Ben voyons !"; }
void F(char *p) { cout << "Évidemment ?"; }
F(NULL);
Ce cas n'est pas vraiment possible en C, ce qui peut expliquer que NULL n'y ait pas aussi mauvaise presse...
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/