> et ton pointeur est un void* ? Dans ce cas, un malloc est possible,
mais ton pointeur va prendre des risques... voir dessous.
1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
Si malloc échoue alors ça renvoie NULL, et ça plante si on ne teste pas.
2) malloc renvoie un void* donc pas de typage fort du pointeur.
Tu est obligé de faire un cast "sauvage" (statique, quoi) et souvent
ça masque des futurs problèmes...
struct C1 { /*....*/ };
struct C2 {/*....*/}; autre objet de taille différente
C1* ptr_mal_alloue = (C1*)malloc(sizeof(C2)); // AIE AIE !!!
C1 *ptr_qui_compile_pas = new C2; // ici le compilo bloque, normal !
> et ton pointeur est un void* ? Dans ce cas, un malloc est possible,
mais ton pointeur va prendre des risques... voir dessous.
1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
Si malloc échoue alors ça renvoie NULL, et ça plante si on ne teste pas.
2) malloc renvoie un void* donc pas de typage fort du pointeur.
Tu est obligé de faire un cast "sauvage" (statique, quoi) et souvent
ça masque des futurs problèmes...
struct C1 { /*....*/ };
struct C2 {/*....*/}; autre objet de taille différente
C1* ptr_mal_alloue = (C1*)malloc(sizeof(C2)); // AIE AIE !!!
C1 *ptr_qui_compile_pas = new C2; // ici le compilo bloque, normal !
> et ton pointeur est un void* ? Dans ce cas, un malloc est possible,
mais ton pointeur va prendre des risques... voir dessous.
1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
Si malloc échoue alors ça renvoie NULL, et ça plante si on ne teste pas.
2) malloc renvoie un void* donc pas de typage fort du pointeur.
Tu est obligé de faire un cast "sauvage" (statique, quoi) et souvent
ça masque des futurs problèmes...
struct C1 { /*....*/ };
struct C2 {/*....*/}; autre objet de taille différente
C1* ptr_mal_alloue = (C1*)malloc(sizeof(C2)); // AIE AIE !!!
C1 *ptr_qui_compile_pas = new C2; // ici le compilo bloque, normal !
On Sun, 14 Nov 2004 08:23:42 +0100, Vincent Burel
wrote:
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique, il peut éventuellement servire à hinstancier un objet
> de
> gestion de tableau dynamique, voire hinstancier les objets qui seront
> stocker dans un tableau dynamique... Mais encore une fois vous faites
> confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
>
manifestement tu as pris l'habitude de préfixer tes variables d'instance
avec le préfixe 'hinst' . c'est bien.
de là à en faire dériver un verbe en français ....
'instancier' et non 'hinstancier'
je me demande d'ailleurs si ce verbe existe en dehors du jargon
informatique.
vu le nombre d'utilisations que tu en as faites, je n'ai pu m'empêcher
d'instancier cette correction !
On Sun, 14 Nov 2004 08:23:42 +0100, Vincent Burel
<vincent.burel@spam-wanadoo.fr> wrote:
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique, il peut éventuellement servire à hinstancier un objet
> de
> gestion de tableau dynamique, voire hinstancier les objets qui seront
> stocker dans un tableau dynamique... Mais encore une fois vous faites
> confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
>
manifestement tu as pris l'habitude de préfixer tes variables d'instance
avec le préfixe 'hinst' . c'est bien.
de là à en faire dériver un verbe en français ....
'instancier' et non 'hinstancier'
je me demande d'ailleurs si ce verbe existe en dehors du jargon
informatique.
vu le nombre d'utilisations que tu en as faites, je n'ai pu m'empêcher
d'instancier cette correction !
On Sun, 14 Nov 2004 08:23:42 +0100, Vincent Burel
wrote:
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique, il peut éventuellement servire à hinstancier un objet
> de
> gestion de tableau dynamique, voire hinstancier les objets qui seront
> stocker dans un tableau dynamique... Mais encore une fois vous faites
> confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
>
manifestement tu as pris l'habitude de préfixer tes variables d'instance
avec le préfixe 'hinst' . c'est bien.
de là à en faire dériver un verbe en français ....
'instancier' et non 'hinstancier'
je me demande d'ailleurs si ce verbe existe en dehors du jargon
informatique.
vu le nombre d'utilisations que tu en as faites, je n'ai pu m'empêcher
d'instancier cette correction !
en C++ un new est préférable à un malloc.
Et c'est gravé dans quel marbre, ce dogme ?
Je code en C++ et j'utilise new quand j'ai un type fixe derrière, par
exemple une structure pour une liste chaînée - donc à taille fixe. Mais
quand j'ai une allocation dont la taille dynamique m'est fournie par une
variable, par exemple pour loger un bloc d'octets élastique, alors
retour au bon vieux malloc. Honte à moi.
Au fait, ce "préférable", ça veut dire quoi exactement ?
En C++ l'utilisation d'un std::vector est préférable à un new pour
faire un tableau dynamique.
Indubitablement. Et des oeillères sont préférables pour ne pas avoir un
horizon trop large. Je dois être de la vieille école.
en C++ un new est préférable à un malloc.
Et c'est gravé dans quel marbre, ce dogme ?
Je code en C++ et j'utilise new quand j'ai un type fixe derrière, par
exemple une structure pour une liste chaînée - donc à taille fixe. Mais
quand j'ai une allocation dont la taille dynamique m'est fournie par une
variable, par exemple pour loger un bloc d'octets élastique, alors
retour au bon vieux malloc. Honte à moi.
Au fait, ce "préférable", ça veut dire quoi exactement ?
En C++ l'utilisation d'un std::vector est préférable à un new pour
faire un tableau dynamique.
Indubitablement. Et des oeillères sont préférables pour ne pas avoir un
horizon trop large. Je dois être de la vieille école.
en C++ un new est préférable à un malloc.
Et c'est gravé dans quel marbre, ce dogme ?
Je code en C++ et j'utilise new quand j'ai un type fixe derrière, par
exemple une structure pour une liste chaînée - donc à taille fixe. Mais
quand j'ai une allocation dont la taille dynamique m'est fournie par une
variable, par exemple pour loger un bloc d'octets élastique, alors
retour au bon vieux malloc. Honte à moi.
Au fait, ce "préférable", ça veut dire quoi exactement ?
En C++ l'utilisation d'un std::vector est préférable à un new pour
faire un tableau dynamique.
Indubitablement. Et des oeillères sont préférables pour ne pas avoir un
horizon trop large. Je dois être de la vieille école.
Alexandre wrote:1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
C'est les nazes qui programment sans vérifier les retours de fonctions...
Alexandre wrote:
1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
C'est les nazes qui programment sans vérifier les retours de fonctions...
Alexandre wrote:1) si new échoue alors lancement d'une exception... et le programme
s'arrete proprement si on ne teste rien.
C'est les nazes qui programment sans vérifier les retours de fonctions...
Ben voyons... Tu vas m'expliquer lentement en quoi j'aurais un problème
si j'ai proprement défini un tableau d'octets simples dont je connais
pas la taille, que j'alloue avec malloc - en vérifiant qu'il a bien été
alloué, mais oui mon bon Monsieur, ah y'a un peu plus, je vous le mets
quand même ? - et que je manipule ensuite avec un cast pour taper
dedans. Je cherche les futurs problèmes masqués, mais je les vois pas.
Me faudrait de bonnes oeillères.
Note que tu peux avoir les mêmes soucis de casting avec du new. J'ai par
exemple une liste chaînée dont chaque structure contient entre autres un
pointeur void* parce que je sais pas à l'avance ce qui va aller dedans
Ma conclusion seconde est que ma conclusion première était bonne : avec
une structure définie (ou un tableau alloué dynamiquement mais à taille
connue à la compilation), c'est new ; avec un tableau à taille connue
seulement à l'exécution, c'est malloc ; et pour ceux qui se
contrefichent de programmer proprement, c'est l'ANPE.
Ben voyons... Tu vas m'expliquer lentement en quoi j'aurais un problème
si j'ai proprement défini un tableau d'octets simples dont je connais
pas la taille, que j'alloue avec malloc - en vérifiant qu'il a bien été
alloué, mais oui mon bon Monsieur, ah y'a un peu plus, je vous le mets
quand même ? - et que je manipule ensuite avec un cast pour taper
dedans. Je cherche les futurs problèmes masqués, mais je les vois pas.
Me faudrait de bonnes oeillères.
Note que tu peux avoir les mêmes soucis de casting avec du new. J'ai par
exemple une liste chaînée dont chaque structure contient entre autres un
pointeur void* parce que je sais pas à l'avance ce qui va aller dedans
Ma conclusion seconde est que ma conclusion première était bonne : avec
une structure définie (ou un tableau alloué dynamiquement mais à taille
connue à la compilation), c'est new ; avec un tableau à taille connue
seulement à l'exécution, c'est malloc ; et pour ceux qui se
contrefichent de programmer proprement, c'est l'ANPE.
Ben voyons... Tu vas m'expliquer lentement en quoi j'aurais un problème
si j'ai proprement défini un tableau d'octets simples dont je connais
pas la taille, que j'alloue avec malloc - en vérifiant qu'il a bien été
alloué, mais oui mon bon Monsieur, ah y'a un peu plus, je vous le mets
quand même ? - et que je manipule ensuite avec un cast pour taper
dedans. Je cherche les futurs problèmes masqués, mais je les vois pas.
Me faudrait de bonnes oeillères.
Note que tu peux avoir les mêmes soucis de casting avec du new. J'ai par
exemple une liste chaînée dont chaque structure contient entre autres un
pointeur void* parce que je sais pas à l'avance ce qui va aller dedans
Ma conclusion seconde est que ma conclusion première était bonne : avec
une structure définie (ou un tableau alloué dynamiquement mais à taille
connue à la compilation), c'est new ; avec un tableau à taille connue
seulement à l'exécution, c'est malloc ; et pour ceux qui se
contrefichent de programmer proprement, c'est l'ANPE.
C'est une confusion classique chez les "pseudo-programmeur" C++, je le
répète donc, le NEW en C++ sert à hinstancier, créer et déclencher l'appel
du constructeur d'un object de type C++. le Malloc est une fonction qui
permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec ces
deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
d'un librairie, "new" est un mot réservé du langage...
En C++ l'utilisation d'un std::vector est préférable à un new pour faire
untableau dynamique.
Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
tableau dynamique,
il peut éventuellement servire à hinstancier un objet de
gestion de tableau dynamique, voire hinstancier les objets qui seront
stocker dans un tableau dynamique... Mais encore une fois vous faites
confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
C'est une confusion classique chez les "pseudo-programmeur" C++, je le
répète donc, le NEW en C++ sert à hinstancier, créer et déclencher l'appel
du constructeur d'un object de type C++. le Malloc est une fonction qui
permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec ces
deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
d'un librairie, "new" est un mot réservé du langage...
En C++ l'utilisation d'un std::vector est préférable à un new pour faire
un
tableau dynamique.
Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
tableau dynamique,
il peut éventuellement servire à hinstancier un objet de
gestion de tableau dynamique, voire hinstancier les objets qui seront
stocker dans un tableau dynamique... Mais encore une fois vous faites
confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
C'est une confusion classique chez les "pseudo-programmeur" C++, je le
répète donc, le NEW en C++ sert à hinstancier, créer et déclencher l'appel
du constructeur d'un object de type C++. le Malloc est une fonction qui
permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec ces
deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
d'un librairie, "new" est un mot réservé du langage...
En C++ l'utilisation d'un std::vector est préférable à un new pour faire
untableau dynamique.
Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
tableau dynamique,
il peut éventuellement servire à hinstancier un objet de
gestion de tableau dynamique, voire hinstancier les objets qui seront
stocker dans un tableau dynamique... Mais encore une fois vous faites
confusion. C'est comme si je disais, "New sert à faire un jeu vidéo".
Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce sera
plus lisible.
Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce sera
plus lisible.
Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce sera
plus lisible.
Si tu alloue un tableau d'octets, puis que tu fais croire à ton
compilateur que tu as des objets à l'intérieur en castant, tu as alors
un comportement indéfini.
Si tu alloue un tableau d'octets, puis que tu fais croire à ton
compilateur que tu as des objets à l'intérieur en castant, tu as alors
un comportement indéfini.
Si tu alloue un tableau d'octets, puis que tu fais croire à ton
compilateur que tu as des objets à l'intérieur en castant, tu as alors
un comportement indéfini.
D'après AMcD®:Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce
sera plus lisible.
bof.
D'après AMcD®:
Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce
sera plus lisible.
bof.
D'après AMcD®:Déjà le gars il à qu'a coder proprement genre PC1 au lieu de C1*, ce
sera plus lisible.
bof.
Vincent Burel wrote:
> C'est une confusion classique chez les "pseudo-programmeur" C++, je le
> répète donc, le NEW en C++ sert à hinstancier, créer et déclencher
> du constructeur d'un object de type C++. le Malloc est une fonction qui
> permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec
> deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
> d'un librairie, "new" est un mot réservé du langage...
C'est un peu plus compliqué. En C++, new est à la fois un mot clef et un
opérateur (et par conséquent une fonction) qui peut être surchargé.
De plus, new peut servir à allouer de la mémoire uniquement (avec les
types de base), à allouer de la mémoire et construire des objets (le
plus classique, avec des UDT), ou encore à construire des objets
uniquement dans un emplacement mémoire préalloué (placement new).
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique,
Ah bon ? Que penser de ce code ?
int f()
{
int taille;
cin >> taille;
char *chaine = new char[taille];
delete[] chaine;
}
Vincent Burel wrote:
> C'est une confusion classique chez les "pseudo-programmeur" C++, je le
> répète donc, le NEW en C++ sert à hinstancier, créer et déclencher
> du constructeur d'un object de type C++. le Malloc est une fonction qui
> permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec
> deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
> d'un librairie, "new" est un mot réservé du langage...
C'est un peu plus compliqué. En C++, new est à la fois un mot clef et un
opérateur (et par conséquent une fonction) qui peut être surchargé.
De plus, new peut servir à allouer de la mémoire uniquement (avec les
types de base), à allouer de la mémoire et construire des objets (le
plus classique, avec des UDT), ou encore à construire des objets
uniquement dans un emplacement mémoire préalloué (placement new).
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique,
Ah bon ? Que penser de ce code ?
int f()
{
int taille;
cin >> taille;
char *chaine = new char[taille];
delete[] chaine;
}
Vincent Burel wrote:
> C'est une confusion classique chez les "pseudo-programmeur" C++, je le
> répète donc, le NEW en C++ sert à hinstancier, créer et déclencher
> du constructeur d'un object de type C++. le Malloc est une fonction qui
> permet d'allouer de la mémoire. Donc, il n'y a pas grand rapport avec
> deux fonctions, ou plutot fonctionnalités, car "malloc" est une fonction
> d'un librairie, "new" est un mot réservé du langage...
C'est un peu plus compliqué. En C++, new est à la fois un mot clef et un
opérateur (et par conséquent une fonction) qui peut être surchargé.
De plus, new peut servir à allouer de la mémoire uniquement (avec les
types de base), à allouer de la mémoire et construire des objets (le
plus classique, avec des UDT), ou encore à construire des objets
uniquement dans un emplacement mémoire préalloué (placement new).
> Ce choix là, vous regarde, ceci dit le NEW ne peut pas servir à faire un
> tableau dynamique,
Ah bon ? Que penser de ce code ?
int f()
{
int taille;
cin >> taille;
char *chaine = new char[taille];
delete[] chaine;
}