CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] tableaux non contraints ?

Chti_Dkois
Chti_Dkois
Niveau 10
18 janvier 2005 à 19:28:22

Coucou

Je voudrais savoir comment on peux faire des tableaux " non contraints" en C ?

j´ai entendu dire qu´avec malloc on pouvait faire ce genre de tableaux, mais je gere pas des masses malloc ( les seules fois ou je l´ai utilisé c´était pour donner de la place dans un tableau en debut de fonction)

Parce que dans un programme, je vais avoir besoin de faire varier la taille du tableau surement, et je gere pas du tout...

D´avance merci

LGV
LGV
Niveau 28
18 janvier 2005 à 20:19:10

d´apres ce que tu dis, " non contraint" = dynamique :)

et effectivement le malloc te permet de faire cela, puisqu´il te permet d´allouer une zone mémoire de taille arbitraire et de récupérer un pointeur dessus ( et comme un tableau n´est autre qu´un pointeur, ça roule).
Attention que si tu souhaites modifier la taille de ton tableau alors que tu y a déjà mis des éléments, il faut faire gaffe à bien les conserver ( vu qu´un nouveau malloc va te filer un nouveau bloc mémoire ; realloc ? ). Selon l´utilisation que tu veux en avoir, p-e serait il que tu te mettes en place une structure de données adaptée à ton probleme : pile, liste chainee, vecteur ( = tableau redimensionnable) pour cacher toute cette partie " gestion de ressources" ; tu pourras ensuite utiliser ta structure de données d´un point de vue extérieur, dans ton programme, bcp plus facilement.

dnob700
dnob700
Niveau 10
18 janvier 2005 à 21:00:13

si tu ne comprend pas du tout ce que te dit LGV car tu ne sais pas ce qu´un un vecteur ou autre structure de données un tant soit peu avancé, une solution certe pas la meilleur mais simple à mettre en place si ton tableau ne change pas trop souvent de taille c´est de le recopier entièrement dans le nouvel emplacement mémoire quand tu doit lui changer sa taille ( sans oublier de désalouer l´ancien emplacement).

Chti_Dkois
Chti_Dkois
Niveau 10
18 janvier 2005 à 23:13:12

Oui c´est ça, dynamiques :rouge:

par contre, comment je declare et utilise?

comme un tableau normal?

JeanYvesYves
JeanYvesYves
Niveau 10
19 janvier 2005 à 00:14:50

tout a fait !

mais avec un pointeur : un exemple :

int* tab;
tab=(int*)malloc(10*sizeof(int)); / / 10 elements.

tab[0]=3;
tab[6]=5; / / meme chose qu´en statique

free(tab); / / ne pas oublier.

sinon, tu peux, mais bon, beaucoup disent que c´est sale :

int* tab;
tab=(int*)malloc(10*sizeof(int)); / / 10 elements.

tab[0]=3;
tab[6]=5; / / meme chose qu´en statique

/ / merde ! ! 10 ça fait trop peu ! m´en faut 20 !

tab=(int*)realloc(tab,10*sizeof(int));

tab[15]=7;

free(tab); / / ne pas oublier.

kufa
kufa
Niveau 9
19 janvier 2005 à 09:46:54

< troll>

Ou sinon ya la technique de demomaker:

int *tab = ( int*) malloc( sizeof(int) * NB_MAX_ELTS_MAX_MAX + MORE_MEMORY_JUST_IN_CASE ) ;

Pas de realloc a faire du coup ; )

< /troll>

Chti_Dkois
Chti_Dkois
Niveau 10
19 janvier 2005 à 10:01:04

Oulah ^^

le troll, j´y ai rien pigé ^^

Le reste, ça va...

Par contre, niveau bibliotheques, je dois prendre lesquelles?

et si je saisie une varibale avant, je peux continuer?

genre:

int k, tab;
scanf("%d",&);
tab=(int*)malloc(k*sizeof(int));
free(tab);

? ??

le free sert à quoi?
et le realloc?

dnob700
dnob700
Niveau 10
19 janvier 2005 à 19:11:16

realloc marche comment ?

il copie la mémoire vers un nouvel emplacement ?
parce que je suppose qu´il ne peut pas espérer avoir de la place à la fin du précédent bloc si ?

Altonfrere
Altonfrere
Niveau 10
19 janvier 2005 à 20:08:20

En gros realloc agrandit la zone allouée ou la déplace si ya pas assez.
Attention par contre à la mémorisation d´adresses liées à la zone allouée car après un realloc les pointeurs peuvent ne plus correspondre . .. Alors le mieux c´est de mémoriser des offsets et recalculer les adresses en fonction du pointeur de début de zone.

Sinon pour le free ca sert à libérer la mémoire précédemment allouée, ce qui est essentiel pour éviter de saturer la mémoire.

Altonfrere
Altonfrere
Niveau 10
19 janvier 2005 à 20:14:53

autre problème du realloc . .. à consommer avec modération :)

http://support.microsoft.com/kb/q225099/

kufa
kufa
Niveau 9
19 janvier 2005 à 21:11:21

Bah de toute facon, en utilisant vc(version quelconque) et crt0, ca leak quoi qu´il arrive d´apres purify...
Vive ic++ et un crt0 fait a la main ; )

Chti_Dkois
Chti_Dkois
Niveau 10
20 janvier 2005 à 17:55:21

On peut faire ça avec un tableau à plusieurs dimensions?

dnob700
dnob700
Niveau 10
21 janvier 2005 à 18:11:25

oui, mais tu doit allouer les lignes les unes après les autres ( après avoir allouer un tableau pour stocker les pointeurs vers chaques lignes).

de plus faut pas se tromper quand tu désalloue.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment