OVH Cloud OVH Cloud

probleme tableaux

26 réponses
Avatar
giovanni
j ai ces ligne la
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;
le probleme et que dans nb[t][0][0][0][0] il y a pas la valeur nb_1 ?
pourquoi?j ai mis 999 ne sachant pas taille des donnee j ai mis le max...

10 réponses

1 2 3
Avatar
giovanni
me dit erreur a la ligne
nb[t][0][0][0][0]=nb_1;
41 E:sauveDev-Cppok7.cpp invalid types `int[int]' for array subscript

petite erreur corriger:
int * num=new int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
et non comme avant
"giovanni" a écrit dans le message de news:

j ai ces ligne la
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;
le probleme et que dans nb[t][0][0][0][0] il y a pas la valeur nb_1 ?
pourquoi?j ai mis 999 ne sachant pas taille des donnee j ai mis le max...




Avatar
Vincent Lascaux
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];


Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800 tera
octets de mémoire vive. Je veux bien que tu aies de l'avance sur ton temps,
mais aujourd'hui, il ne faut pas trop compter sur le fait qu'un ordinateur
ait autant de mémoire disponible (bien que ce soit théoriquement possible
sur des machines 64 bits ;))
Qu'est ce que tu essaies de faire ?

--
Vincent

Avatar
Jean-Marc Bourguet
"Vincent Lascaux" writes:

int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];


Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800 tera
octets de mémoire vive.


Ou tu as vu ca?

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


Avatar
Jean-Marc Bourguet
"giovanni" writes:

j ai ces ligne la
int * num=new * int[100,100,100,100,100];


Ca compile? Ca m'etonne: *int n'est pas un type.


int* nb=new int[999,999,999,999,999];
Alloue un tableau de 999 entiers: , est l'operateur , qui evalue les

expressions en sequence donc les 4 premiers 999 sont en pratique ignores.
C'est la meme chose que

int* nb = new int[999];

(Ce ne le serait pas si les expressions avaient des effets de bord,
mais ce serait de tres mauvais style).

int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;


Ca compile? Ca m'etonne: nb[t] est un int qui ne peut pas etre
indexe.

--
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

Avatar
Cyrille
me dit erreur a la ligne
nb[t][0][0][0][0]=nb_1;


Bon, je vois que vous désirez accéder à un tableau de tableau de
tableau, etc.

41 E:sauveDev-Cppok7.cpp invalid types `int[int]' for array subscript


Oui, nb étant un simple pointeur sur un int, le déréférencer 5 fois n'a
aucun sens et ça ne compile heureusement pas.

petite erreur corriger:
int* nb=new int[999,999,999,999,999];


Ici, vous créez un tableau de 999 ints, rien de plus. Si votre but est
de créer un tableau de tableau de ... etc, ce n'est certainement pas la
bonne syntaxe qui serait plutôt:
int nb[999][999][999][999][999];

La raison pour laquelle vous créez un simple tableau est que la virgule
est en C++ un opérateur qui évalue chaque opérande puis renvoye celle de
droite. Ici, "999,999,999,999,999" est donc évalué à 999.

Mais en fait il y a de fortes chances que vous n'arriviez pas à allouer
votre tableau même avec la syntaxe correcte: en effet reserver de
l'espace pour 999^5, c'est un peu moins de 100 millions de milliards,
d'entiers, si les entiers font quatre octets, il vous faudrait une RAM
de 400 millions de giga-octets, et un système 64-bits pour l'adresser
correctement (et du coup, les entiers feraient 8 octets, et on
approcherait pour vos besoin de 0,8 milliard de giga-octets, ou 0,8
exa-octet).

j ai mis 999 ne sachant pas taille des donnee j ai mis le max...


Si vous ne connaissez pas la taille de vos données, utilisez
std::vector, n'allouez pas des tableaux de taille faramineuse! :)

--
win the yes need the no to win against the no!

Avatar
Cyrille

Mais en fait il y a de fortes chances que vous n'arriviez pas à allouer
votre tableau même avec la syntaxe correcte: en effet reserver de
l'espace pour 999^5, c'est un peu moins de 100 millions de milliards,
d'entiers, si les entiers font quatre octets, il vous faudrait une RAM
de 400 millions de giga-octets, et un système 64-bits pour l'adresser
correctement (et du coup, les entiers feraient 8 octets, et on
approcherait pour vos besoin de 0,8 milliard de giga-octets, ou 0,8
exa-octet).


Bon, en fait mon calcul est inexact (je me suis planté d'un facteur
100), mais l'idée est là quand même: votre tableau est trop énorme pour
n'importe quel machine.

--
win the yes need the no to win against the no!

Avatar
Vincent Lascaux
"Jean-Marc Bourguet" a écrit dans le message de news:

"Vincent Lascaux" writes:

int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];


Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en
fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800
tera
octets de mémoire vive.


Ou tu as vu ca?


Même si le compilateur comprend pas ce qu'il veut faire, moi je comprends
qu'il essaie d'allouer un tableau à 5 dimensions... Mais tu as raison : je
me suis trompé, ce qu'il veut c'est un truc 4 fois plus grand (parceque ce
sont des ints souvent sur 4 octets). Ca ferait donc plutot 7200 tera octets.

Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à répondre à
une question sans apporter aucune information. Je suis convaincu que tu
savais de quoi je parlais (franchement, s'il l'auteur savait qu'il y avait
un opérateur ',', est ce qu'il allouerait un tableau de 100 ou de 999
entiers avec le code qu'il a présenté ?)

--
Vincent



Avatar
Jean-Marc Bourguet
"Vincent Lascaux" writes:

Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à
répondre à une question sans apporter aucune information.


Generalement, quand je reponds aussi laconiquement c'est que soit j'ai
donne ou compte donner l'info par ailleurs (ce qui a mon avis etait le
cas ici, j'ai donne l'info dans un autre message qui a ete poste juste
apres). Parfois il y a un delai long -- et si l'info a ete donneepar
quelqu'un d'autre au moment ou je reviens sur le pb je ne la redonne
pas. Ce n'est pas toujours l'ideal mais je prefere ca a laisser des
erreurs trainer sans etre contredites. J'essaye aussi de ne pas le
faire avec des messages en tete de fil.

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

Avatar
Vincent Lascaux
Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à
répondre à une question sans apporter aucune information.


Generalement, quand je reponds aussi laconiquement c'est que soit j'ai
donne ou compte donner l'info par ailleurs (ce qui a mon avis etait le
cas ici, j'ai donne l'info dans un autre message qui a ete poste juste
apres). Parfois il y a un delai long -- et si l'info a ete donneepar
quelqu'un d'autre au moment ou je reviens sur le pb je ne la redonne
pas. Ce n'est pas toujours l'ideal mais je prefere ca a laisser des
erreurs trainer sans etre contredites. J'essaye aussi de ne pas le
faire avec des messages en tete de fil.


OK, même si c'est à ton message que je répondais, tu n'étais pas directement
destiné. C'est une impression générale que j'ai : souvent les contributeurs
qui savent ont tendance à répondre de façon exacte, mais sans apporter
l'information qui va permettre de débloquer la personne qui a posé la
question.

Mets toi à la place de l'auteur du message qui ne connait pas l'opérateur
,. Je pense qu'il aurait été plus efficace (et pas moins laconique) de dire
"Non : 100,100,100,100,100 vaut 100", où "Non : cf mon autre message" plutot
que "Où tu as vu ca ?" qui ne contredit pas totalement. Enfin... en même
temps, c'est vrai qu'il y a tellement d'erreurs dans le code initial que
c'est difficile d'apporter un commentaire très constructif en moins de ligne
que ne le fait un bon bouquin de C++ :)

--
Vincent


Avatar
Michael
Jean-Marc Bourguet wrote in
news::

int* nb=new int[999,999,999,999,999];
Alloue un tableau de 999 entiers: , est l'operateur , qui evalue les

expressions en sequence donc les 4 premiers 999 sont en pratique ignores.
C'est la meme chose que

int* nb = new int[999];


Quelle utilisation "pratique" peut-on avoir de l'operateur , ???


1 2 3