Tableau dynamique dans Stack?
Est-ce correct ?
C'est compilé avec g++ (3.4) avec succès.
int main() { int x = 12; char pz[x]; }
source d'informationauteur Janaka
Vous devez vous connecter pour publier un commentaire.
Est-ce correct ?
C'est compilé avec g++ (3.4) avec succès.
int main() { int x = 12; char pz[x]; }
source d'informationauteur Janaka
Vous devez vous connecter pour publier un commentaire.
Voici votre combinaison de réponse de celles-là:
Votre code maintenant est pas standard C++. Il est norme C99. C'est parce que C99 vous permet de déclarer des tableaux dynamiquement de cette façon. Pour clarifier, c'est aussi la norme C99:
C'est pas standard quoi que ce soit:
Il ne peut pas être standard C++ parce que requis constante de la taille des matrices, et il ne peut pas être standard C parce que C n'a pas de
std::cin
(ou les espaces de noms, ou des classes, etc...)Pour le rendre standard C++, ce faire:
Si vous voulez un tableau dynamique, vous peut ce faire:
Mais vous devez le faire:
Techniquement, ce n'est pas une partie de C++. Vous pouvez le faire à longueur variable des tableaux en C99 (ISO/IEC 9899:1999), mais ils ne font pas partie de C++. Comme vous l'avez découvert, ils sont pris en charge comme une extension par certains compilateurs.
G++ prend en charge un C99 fonctionnalité qui permet dynamiquement la taille des tableaux. Il n'est pas standard C++. G++ a la
-ansi
option qui désactive certaines fonctionnalités qui ne sont pas en C++, mais ce n'est pas l'un d'eux. Pour faire de G++ rejeter ce code, utilisez la-pedantic
option:Si vous voulez un tableau dynamique sur la pile:
L'allocation des tableaux de longueur variable sur la pile est une bonne idée, car il est plus rapide et ne pas fragmenter la mémoire. Mais le C++ Standard, malheureusement, ne le supporte pas. Vous pouvez faire cela en utilisant le gabarit wrapper pour
alloca
fonction. Mais à l'aide dealloca
n'est pas vraiment un standard conforme.Standard façon est d'utiliser des std::vector avec allocateur personnalisé si vous voulez éviter une fragmentation de la mémoire et de l'accélération de l'allocation mémoire. Prendre un coup d'oeil sur boost::pool_alloc pour un bon échantillon de rapide de l'allocateur.
En pratique, si vous voulez faire un tableau dynamique, vous devez utiliser std::vector, comme dans:
Si vous êtes juste curieux au sujet de la syntaxe, alors ce que vous cherchez est:
Aucune de ces sont alloués avec le stockage local. Dynamiquement, un tableau de taille qui est attribué automatiquement à l'aide de local de stockage n'est pas actuellement pris en charge dans la norme C++, mais est pris en charge dans le courant C standard.