OVH Cloud OVH Cloud

déclaration tableau C99 taille variable

36 réponses
Avatar
Nicolas Aunai
salut,

je viens d'apprendre avec surprise que je peux faire :

int tab[x]; avec x une variable dont la valeur est acquise pendant
l'execution...


moi qui banissais totalement ce genre de chose, et hurlais après qqn
dès que je le voyais faire ça... je ne sais plus quoi penser...

pourquoi a-t-on permi ça en dans la norme C99 ?

si x est mal controlé dans mon programme, genre si a un moment j'ai
x=319391929919291929, ça me parait très dangereux


explications ?

--
Nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@hotmail.com

6 réponses

1 2 3 4
Avatar
DINH Viêt Hoà

En effet, mais si on veut programmer de manière portable, il faut
savoir qu'il existe des systèmes se comportant ainsi (pour le noyau
Linux que je connais bien, il se comporte ainsi par défaut, mais un
patch nommé "strict overcommit" corrgie le pb, au prix d'un peu de
performance)


Heu ... comment veux-tu prévoir le comportement du système d'exploitation
par rapport à l'allocation mémoire ? Tout ce qu'on peut savoir c'est que
cela peut se produire, après, comment prévenir ... ?

--
DINH V. Hoa,

"du sucre dans le pain brioché ???" -- groz

Avatar
Laurent Wacrenier
DINH Viêt Hoà écrit:

Heu ... comment veux-tu prévoir le comportement du système d'exploitation
par rapport à l'allocation mémoire ? Tout ce qu'on peut savoir c'est que
cela peut se produire, après, comment prévenir ... ?



Un allocateur mémoire qui n'alloue pas la mémoire mais ne fait que
déclarer l'allocation ne permet pas de faire du C, juste une
approximation.

Avatar
kilobug

En effet, mais si on veut programmer de manière portable, il faut
savoir qu'il existe des systèmes se comportant ainsi (pour le noyau
Linux que je connais bien, il se comporte ainsi par défaut, mais un
patch nommé "strict overcommit" corrgie le pb, au prix d'un peu de
performance)



Heu ... comment veux-tu prévoir le comportement du système d'exploitation
par rapport à l'allocation mémoire ? Tout ce qu'on peut savoir c'est que
cela peut se produire, après, comment prévenir ... ?


Ben c'était un peu l'idée de mon message "attention, parfois ça peut
se passer bizarrement, il faut en tenir compte", c'est tout

--
Gael Le Mignot "Kilobug" - - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA

Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org


Avatar
Stephane Legras-Decussy
"Gaël Le Mignot" a écrit dans le message news:

Gael Le Mignot "Kilobug" - - http://kilobug.free.fr


trop cool, j'ai la même peluche que sur 016-penguins2.jpg à gauche...

il s'appelle "Glaçon", il est délavé pareil... :-)

par contre, j'ai jamais touché à un Linux de ma vie...

Avatar
Marc Boyer
Gaël Le Mignot wrote:
Gaël Le Mignot wrote:
A ma connaissance, ce que tu décris, c'est *une* stratégie,
et je dirais même une stratégie puis privilégie la vitesse
au mépris de la fiabilité.


En effet, mais si on veut programmer de manière portable, il faut
savoir qu'il existe des systèmes se comportant ainsi (pour le noyau
Linux que je connais bien, il se comporte ainsi par défaut, mais un
patch nommé "strict overcommit" corrgie le pb, au prix d'un peu de
performance)


Disons que je vois mal comment coder de manière fiable sur
un OS avec une telle stratégie... Si l'OS a la gentillesse
au moins d'envoyer un signal, on peut peut-être à grand peine
limiter la casse. Mais là, je sèche.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
DINH Viêt Hoà

Disons que je vois mal comment coder de manière fiable sur
un OS avec une telle stratégie... Si l'OS a la gentillesse
au moins d'envoyer un signal, on peut peut-être à grand peine
limiter la casse. Mais là, je sèche.


Et bien, il n'y a plus qu'à subir ...

--
DINH V. Hoa,

"s/^((.|[^[]|[(^.|[^^])[^]]*])*)([^*[])/14/"
-- Stéphane CHAZELAS

1 2 3 4