Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1303 connectés 

  FORUM HardWare.fr
  Programmation

  [C] Tableau infiniment grand

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Tableau infiniment grand

n°61486
bkadoum
Posté le 25-09-2001 à 16:49:36  profilanswer
 

C'est possible de définir la taille d'un tableau avec une variable et non une constante?

mood
Publicité
Posté le 25-09-2001 à 16:49:36  profilanswer
 

n°61489
bkadoum
Posté le 25-09-2001 à 16:51:41  profilanswer
 

En tout cas cette solution marche pas:
 
int n;
int tab[n];
 
Y'a un autre moyen?

n°61490
tgrx
My heart is pumping for love
Posté le 25-09-2001 à 16:52:37  profilanswer
 

int* t= malloc(n*sizeof(int));

n°61491
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-09-2001 à 16:53:08  profilanswer
 

oui et non (genial comme reponse :D)
 
tu ne peux pas utiliser une variable si tu définis ton tableau "statiquement" (genre int tab[50])
par contre si tu fais int *tab et ensuite tab = new int[50] ou un truc du genre ça devrait passer même avec une variable... Enfin là je suis plus sûr du tout de la syntaxe, je crois que j'ai fait trop de Delphi sans faire du C/C++...
 
edit: bah je tape trop ou alors pas assez vite :D
dans le post ci-dessus solution en C, le truc avec le new c'est en C++ (mais je sais plus si c'est avec des [] ou des ()).

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°61492
Suri
Darksurious
Posté le 25-09-2001 à 16:53:13  profilanswer
 

bkadoum a écrit a écrit :

En tout cas cette solution marche pas:
 
int n;
int tab[n];
 
Y'a un autre moyen?  




 
bonne question! j'ai deja eu ce pb... et po trouvé de soluce..et j'ai du passe par un truc de porc tab[1000000].... :eek2:


---------------
Suri.morkitu.org : Balades au coeur de la ville...
n°61493
Suri
Darksurious
Posté le 25-09-2001 à 16:54:27  profilanswer
 

tgrx a écrit a écrit :

int* t= malloc(n*sizeof(int));  




 
 :ouch: ??? justement on connait pas n...


---------------
Suri.morkitu.org : Balades au coeur de la ville...
n°61494
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-09-2001 à 16:55:36  profilanswer
 

suri a écrit a écrit :

 
 
bonne question! j'ai deja eu ce pb... et po trouvé de soluce..et j'ai du passe par un truc de porc tab[1000000].... :eek2:  




 
cette solution marche pas pcq quand tu fais int tab[50] c'est compilé comme tel, et il (le compilateur) sait combien d'octets fera le tableau. Si tu fais int tab[n] il peut pas deviner la taille du tableau, même si tu as défini n juste au-dessus.
 
 
Suri: tu dis "on ne connait pas n"... faudra bien le connaitre un jour... tu vas pas dire "je veux un tableau mais je sais pas quelle taille"... ou alors tu fais un tableau dynamique, avec la STL par ex.

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°61495
godbout
Génial.
Posté le 25-09-2001 à 16:55:49  profilanswer
 

Ben t'es oblige de le connaitre a un moment ou a un autre nan ?

n°61499
bkadoum
Posté le 25-09-2001 à 17:14:33  profilanswer
 

antp a écrit a écrit :

oui et non (genial comme reponse :D)
 
tu ne peux pas utiliser une variable si tu définis ton tableau "statiquement" (genre int tab[50])
par contre si tu fais int *tab et ensuite tab = new int[50] ou un truc du genre ça devrait passer même avec une variable... Enfin là je suis plus sûr du tout de la syntaxe, je crois que j'ai fait trop de Delphi sans faire du C/C++...
 
edit: bah je tape trop ou alors pas assez vite :D
dans le post ci-dessus solution en C, le truc avec le new c'est en C++ (mais je sais plus si c'est avec des [] ou des ()).  
 
 




 
Ouais la définition du tableau marche comme ca mais la taille reste toujours la même, moi j'aimerai un tableau qui s'agrandisse tout seul indéfiniment.

n°61501
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-09-2001 à 17:17:36  profilanswer
 

ha bhen alors c dynamique, donc soit tu utilises les trucs de la STL, soit tu le fabriques toi même.
Si le nombre de colonnes est fixe par ex, tu peux faire une liste de tableaux à 1 dimension, chaque tableau représentant une ligne.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 25-09-2001 à 17:17:36  profilanswer
 

n°61503
bkadoum
Posté le 25-09-2001 à 17:18:39  profilanswer
 

bkadoum a écrit a écrit :

 
 
Ouais la définition du tableau marche comme ca mais la taille reste toujours la même, moi j'aimerai un tableau qui s'agrandisse tout seul indéfiniment.  




 
A non j'ai parlé trop vite ca marche! Faut juste réallouer le pointeur a chaque fois que la taille s'imcrémente:
 
int n = 0;
int *tab;
 
tab = new int[n];
 
RezizeTab()
{
n++;
tab = new int[n];
}

n°61506
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-09-2001 à 17:22:24  profilanswer
 

t'as intérêt à désalouer la mémoire avant (et donc perdre le contenu du tableau) sinon bonjour la catastrophe...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°61514
Suri
Darksurious
Posté le 25-09-2001 à 17:57:02  profilanswer
 

Bon c bien ce que je disais....mon tab[1 000000] ct un tab fixe. j'etais sur de pas le depasser. Parce que j'ai pas trouve comment faire un tableau dynamique d'int en C...
le "new" c'est en C++ non?


---------------
Suri.morkitu.org : Balades au coeur de la ville...
n°61516
youdontcar​e
Posté le 25-09-2001 à 17:59:42  profilanswer
 

suri a écrit a écrit :

Bon c bien ce que je disais....mon tab[1 000000] ct un tab fixe. j'etais sur de pas le depasser. Parce que j'ai pas trouve comment faire un tableau dynamique d'int en C...
le "new" c'est en C++ non?  



oui. malloc/free = C, new/delete = C++

n°61520
Suri
Darksurious
Posté le 25-09-2001 à 18:20:33  profilanswer
 

antp a écrit a écrit :

t'as intérêt à désalouer la mémoire avant (et donc perdre le contenu du tableau) sinon bonjour la catastrophe...  




 
 
oui donc un tableau dynamique d'int c'est possible ou pas?
   (évidemment je veux garder mon contenu...)


---------------
Suri.morkitu.org : Balades au coeur de la ville...
n°61524
flo850
moi je
Posté le 25-09-2001 à 18:54:01  profilanswer
 

realloc desalloue la memoire de ton ancien tableau puis alloue un nouvel espace et recopie dedans toutes les donnes qui etait dans l'ancien ( a lal limite il tronque ) si nouveau < ancien
en c avec des int :
int * t;
int n=50;
 
t= (int *) malloc( sizeof(int) *n);
 
puis quand tu veux changer la taille t = (int *)realloc(t,sizeof(int)*n);
et voila  
(tiré du man de malloc )


---------------

n°61530
aqwsezsxdr
Posté le 25-09-2001 à 19:53:05  profilanswer
 

le plus simplissime:
 
#include <vector>
using namespace std;
 
vector<int> tableau;
 
puis tu peux utiliser ton tableau comme un vecteur
 
tableau[100]=5;  
tableau.push_back(50); // pour rajouter à la fin
tableau.pop_back(); //te retourne le last
tableau.size(); //te retourne le nb d'elements ds le tableau
...........

n°61554
tgrx
My heart is pumping for love
Posté le 25-09-2001 à 21:22:16  profilanswer
 

aqwsezsxdr> le monsieur le veut en C, pas en C++

n°61558
aqwsezsxdr
Posté le 25-09-2001 à 21:37:23  profilanswer
 

arf, j'ai pas vu le [C] ds le titre du tomic mais bon, y'a deja des grandes chances que son compilo soit un compilo c++. On peut tres bien programmer style c en utilisant des pitites briques c++ pour se faciliter la vie  :)

n°61587
El_gringo
Posté le 26-09-2001 à 09:20:21  profilanswer
 

Mais qd même, tgrx à donné la solution depuis la 3 ligne, et tout le monde blablatte à côté de choses plus ou moins inutiles en ignorant ce qu'il a dit !
 
ça m'énerverai à ta place tgrx ... d'ailleur ça m'énerve  :fou: !
 
lis un peu la doc sur la gestion de mémoire dynamique (malloc, realloc, ...)

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

n°61620
shinichi
Posté le 26-09-2001 à 11:29:09  profilanswer
 

Pour du C un seul truc REALLOC. Le pb c'est que ca bouffe pas mal de tps donc il vaut mieux allouer et reallouer par blocs de N (N connu : c'est toi qui le determine ... :lol:). Donc un alloc de N cases et puis des realloc successifs de N cases ...


---------------
Le meutrier est ... :hot:
n°61633
BENB
100% Lux.
Posté le 26-09-2001 à 11:56:27  profilanswer
 

tgrx a donne une solution...
La plus adaptee semble etre le vector ou list de la STL, mais comme le faisait remarquer tgrx, c'est en C et non en C++...  
donc soit le realloc apres le malloc...
soit comme le propose shinichi une structure de type liste chainee ou chaque element comporte un bloc de m donnees, quand le dernier bloc est plein on en alloue un autre... Quand le dernier est vide on le libere... Mais la on perd la syntaxe tableau...

n°61747
gilou
Modérateur
Modzilla
Posté le 26-09-2001 à 22:14:44  profilanswer
 

Il y a des compilos C qui permettent d' ecrire le code suivant:
 
int tableau[expression];  
ou expression est eventuellement avec des variables, a condition que l'expression soit calculable a l'allocation du tableau (pas de variables non initilisees). Mais c'est pas du standard.
 
De toute maniere, il est clair que en C on ne peut pas avoir de tableaux dont la taille augmente, sans passer par realloc, etant donne qu'un tableau est une zone memoire continue, et qu'une fois cette zone allouee, on ne sait pas si ce qui est apres est disponible.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] Tableau infiniment grand

 

Sujets relatifs
C/C++ question taille de tableauun prog en c++ qui retourne la taille d'un tableau ?
php convertir un string en tableauHTML --> Cellule tableau spéciale
probleme php-mysql retour a la ligne , tableau et saisi de texte[php] condition dans un tableau
[php] tableaujavascript - recuperer la largeur d'une case d'un tableau
[HTML-CSS] c'est quoi déjà pour faire d'une cellule de tableau un lienTableau de controles
Plus de sujets relatifs à : [C] Tableau infiniment grand


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR