cs_imanewin32
Messages postés71Date d'inscriptionmardi 30 mars 2004StatutMembreDernière intervention12 août 2004
-
12 août 2004 à 19:30
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004
-
16 août 2004 à 14:07
slt
je réalise une application MFC et ds une de mes classes j'ai fais l'allocation ds le constructeur de la façon:
chemain=new char[MAX_PATH+1];
comme j'ai l'habitude de faire mais on m'a proposé de faire une allocation statique vue que le nombre d'octet à allouer est tjrs fixe
j'ai pas compris ça!!!
si quelqu'un à une idée ,qu'il m'aide
merci d'avance!!!!!!!
:blush)
A voir également:
Une référence de membre non statique doit être relative à un objet spécifique
cs_Arnotic
Messages postés933Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention 9 janvier 20121 12 août 2004 à 20:19
Imagine un char szBuff[512];
Tu as un buffer de 512 octets, dans lequels tu peux te déplacer grace au pointeur (adresse qui pointe sur cette zone mémoire).
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 13 août 2004 à 18:28
une allocation statique est une allocation mémoire qui se fait en gros en entrant dans un bloc ("{ ... }"); elle est statique car les emplacements mémoires sont déjà prévus avant la compilation
ex: int i[10]; // 10 est bien une CONSTANTE
en revanche, une allocation dynamique est une allocation qui peut se produire n'importe quand dans un programme (non prévue avant compilation)
par ex:
int *n; /* ........... */
n = (int*)malloc( x * sizeof(int) ); /* x : VARIABLE (non nécessairement constante comme 10 au dessus) */
le C interdit par ex. l'allocation dynamique suivante : int i[ x ];
(même si t'as mis x = 10 juste avant avant)
(essirc donne un bon exemple ci-dessus : MAX_PATH est une constante avant la compilation car macro d'ou alloc. stat.)
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 14 août 2004 à 13:46
1: je parle du C, et la norme ne prévoit pas de faire int i[ x ];
2: le cast de malloc est certes (souvent) inutile mais fortement conseillé pour des raisons de portabilité : certains compileurs te gètent si tu ne fais pas le cast, ou tout simplement des warnings peuvent avoir lieu...
3: "en dynamique on alloue sur le tas et en statique dans la pile (pour une fonction) [...] "
tu as tout-à fait raison, mais je ne crois pas qu' imanewin32 attendait une réponse "technique" comme celle-ci, je ne suis pas sur qu'il va la comprendre (sinon il ne poserait pas des questions comme celle-là)
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 14 août 2004 à 18:48
tu as effectivement raison, j'ai dit une grosse annerie (je n'avais pas vu le qualifieur CONST dans ta phrase)
je voulais lui expliquer la diff entre stat. et dyn. simplement, de manière un peu vulgarisée, sans trop entrer dans tous les détails (notamment "const"), mais t'as raison de me le faire remarquer...
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 14 août 2004 à 18:48
tu as effectivement raison, j'ai dit une grosse annerie (je n'avais pas vu le qualifieur CONST dans ta phrase)
je voulais lui expliquer la diff entre stat. et dyn. simplement, de manière un peu vulgarisée, sans trop entrer dans tous les détails (notamment "const"), mais t'as raison de me le faire remarquer...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 15 août 2004 à 14:00
ok pas de probleme, pour le cast du malloc, je dirais juste que vu que la conversion d'un void* est implicite en c (meme si le compilo gueule, c'est un comportement illogique car void* est le type generique en c)
la seule raison de conserver le cast du malloc est pour la compatibilité en c++ (ou seul la conversion void* -> int* est implicite), mais c'est pas bien de melanger source c et c++ ;)
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 15 août 2004 à 19:02
je suis d'accord ac toi...
mais je ne pensais même pas au c++ (bah que j'aime pas ça !!!, tout comme le java...), c'est juste pour éviter les warnings, ça fait désordre je trouve de créer des progs ac des warnings à foison, et je pense que bcp sont d'accord ac moi
mais c vrai qu'on ne devrait même pas avoir à le faire (je crois que même gcc chibre lorqu'on ne cast pas :(, sans vouloir dire des conneries )
ça améliore en revanche la lisibilité du programme je touve
salut !
peut être que tu vas pouvoir me dépanner ? :
quel model de mémoire est utilisé par les compilos C (notamment LCC ou GCC) ? (flat ?), car je n'arrive pas à linker deux .obj (1 ac .asm & 1 ac .C)
cs_pjb
Messages postés19Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention17 août 2004 16 août 2004 à 14:07
merci, c bien ce que je pensais, donc j'ai un autre prob... (je vais le poster ds qq jrs si je ne trouve pas). (ça m'énerve de buter sur un simple problème de liaison !!!!! qqc doit m'échapper...).
pour le cast du malloc, l'avantage est que l'on voit dirrectement quel est le type de la variable, et dans un gros programme, ça améliore un peu la lisibilité , je trouve (notamment qd t'as plein plein de variables).
j'inclus presque toujours <stdlib.h>, dc pas de prob :) .