petit renseignement au sujet de new[]
J'ai une petite question au sujet de l'allocation de memoire avec new. Je voulais simplement allouer un tableau de pointeurs sur char...
J'ai donc ecris ca:
char **tab = new (char *)[10]; // par exemple et pourtant ca ne marche pas
en effet la syntaxe est
char **tab = new char *[10];
J'aimerais avoir des petites explications a ce sujet, la syntaxe de 'new' est bien: new TYPE[size] et mon TYPE est (char *) non ?
Merci
Re: petit renseignement au sujet de new[]
Citation:
Envoyé par manowar
J'ai une petite question au sujet de l'allocation de memoire avec new. Je voulais simplement allouer un tableau de pointeurs sur char...
J'ai donc ecris ca:
char **tab = new (char *)[10]; // par exemple et pourtant ca ne marche pas
Ce que tu as écrit est interprété commece qui a mon avis n'est pas valide (même si como l'accepte comme étant de type char*) car l'indexation doit se faire sur des expressions postfixées et qu'un new est une expression unaire.
Note qu'en général, si on veut utiliser des types un peut complexe avec new, il faut mieux les mettre complètement entre parenthèses parce que les règles de précédences après un new ont des effets parfois très bizarres. Donc ce serait:
Code:
char **tab = new((char*)[10]);
s'il n'y avait la seconde raison.
(char*)[10] n'est en effet pas un type, tu ne pourrais pas non plus t'en servir pour déclarer le paramètre d'une fonction.
Citation:
en effet la syntaxe est
char **tab = new char *[10];
Tu peux aussi faire
Code:
1 2
| char**tab = new (char*[10]);
char** tab = new (char *([10])); |
si tu veux mettre des parenthèses.
PS: Je suis d'accord avec Loic au sujet de vector<string>.
Re: petit renseignement au sujet de new[]
Citation:
Envoyé par Jean-Marc.Bourguet
Ce que tu as écrit est interprété comme
ce qui a mon avis n'est pas valide (même si como l'accepte comme étant de type char*)
Au cas où ça intéresserait quelqu'un, le problème est accepté comme en étant un par Comeau et serait déjà fixé dans une version non releasée.