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

Allocation statique possible en dynamiqu

lemoino
lemoino
Niveau 10
12 mars 2014 à 21:03:04

Bonjour bonjour simple question

Je viens de voir que

int taille;
cin >> taille;

int tableau1[taille]; //fonctionne
//alors que j'ai lu que ça marchait pas et qu'il fallait faire
int* tableau2 = new int[taille];

J'essaye de comprendre différence entre allocation statique et dynamique et les deux fonctionnent pareil, m'aurait-on menti ? :(

LEpigeon-888
LEpigeon-888
Niveau 12
12 mars 2014 à 21:31:54

Je sais pas exactement comment ça fonctionne, parce qu'après plusieurs tests quand je lance le programme ça plante pas si je met une taille plus grande que celle des éléments que auxquelles j'accède, et ça plante si je met une taille plus petite.

MAIS, t'as un warning si tu fais ça (du moins avec -Wall -Wextra -pedantic, je sais pas exactement c'est quelle option qui fait ça), et tu dois considérer chaque warning comme une erreur (donc plus simplement, rajouter un -Werror), donc du coups c'pas possible.

Mais de toute façon, à part ça, l'utilisation est bien différente, ton tableau alloué statiquement doit l'être lors de sa déclaration, et tu ne pourra jamais modifier sa taille, alors que tu peux allouer un tableau dynamiquement quand tu veux, et si t'as envie de changer la taille tu peux.

MrTrolloIo
MrTrolloIo
Niveau 8
12 mars 2014 à 21:35:41

" int taille;
cin >> taille;

int tableau1[taille]; //fonctionne "

Ça dépend des compilateurs, selon les normes C90, C++03 et C++11 tu ne peux pas déclarer un tableau de cette façon alors qu'en C99 et en C11 c'est permis (bien qu'il me semble que le support de cette fonctionnalité est optionnel en C11).

Après même si la norme ne l'autorise pas, comme en C++ par exemple, il se peut que les compilateurs décident de l'autoriser quand même (on appelle souvent cela des extensions), c'est notamment le cas de GCC :

http://gcc.gnu.org/onlineedocs/gcc/Variable-Length.html

lemoino
lemoino
Niveau 10
12 mars 2014 à 21:49:16

Ah d'accord :0 car j'ai pas eu de warning donc voila comme l'a dit "MrTrollolo" ça doit être un bidule d'extension
Merci de vos réponses !

LEpigeon-888
LEpigeon-888
Niveau 12
12 mars 2014 à 21:53:03

T'as quoi comme option activé sur ton compilo ?

Link_2408
Link_2408
Niveau 6
12 mars 2014 à 22:29:11

Ca passe à la compilation (je me souviens plus si y avait un warning) :non2: . En C++ ça marche parce qu'un tableau est traité comme un objet.

Mais attention, en C ça ne marche pas (je peux en témoigner :oui: ).

N’hésitez pas à me corriger si je dis des bêtises.

kufa
kufa
Niveau 9
13 mars 2014 à 02:43:56

MrTrolloIo : oui, en C11 le support des VLAs est optionel

Odvie
Odvie
Niveau 10
13 mars 2014 à 07:16:36

Mais un conseil si jamais tu restes dans la programmation à l'avenir: essaie de pas trop prendre l'habitude des normes modernes du C++, et de rester sur la norme standard.

Link_2048: désolé c'est une bêtise :hap: En Java/C# et autres langages purement objet, oui, ces tableaux sont des objets (dérivent d'une classe Object). Le C++ étant basé sur le C, et le C pouvant théoriquement être compilé avec des compilateur C++, il fallait garder une rétrocompatibilité avec celui-ci, ainsi les éléments du C ne peuvent être des objets.

Pseudo supprimé
Pseudo supprimé 14 mars 2014 à 13:54:44

Odvie, et pourquoi donc ? Et tu sous-entends que les normes modernes style C++11 ne sont pas standard ? :doute:

Odvie
Odvie
Niveau 10
14 mars 2014 à 16:39:57

Je sous-entends rien du tout, c'est un fait :hap:

Le standard, c'est la moyenne d'utilisation. Or dans le milieu professionnel (j'parle pas des jeux vidéos où évidemment on utilises des technos récentes la plupart du temps), quand tu tombes sur un programme d'entreprise en C++, tu peux être quasi certain que c'est du C ISO, voire du C89 :o))

Donc libre à toi d'utiliser des normes récentes, mais faut pas prendre de mauvaises habitudes que tu ne pourras pas utiliser si tu tombes sur du C 89 :o))

godrik
godrik
Niveau 30
14 mars 2014 à 17:00:12

C'ets devenu rare ce genre de probleme. Je ne dis pas que ca n'arrive jamais. Mais en moyenne, les projets que j'ai vu sont en C99 ou en C++03.

Mais c'est toujours une bonne chose de connaitre les differentes normes qui existent. Mais il ne faut pas trop focaliser non plus.

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