[C++] Allocation dynamique

Fermé
arthix Messages postés 52 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 31 août 2006 - 3 juil. 2003 à 16:15
 c+ - 6 mai 2010 à 15:43
Salut !

Je travaille en ce moment sur un logiciel qui permettra à terme d'effectuer des traitements sur un signal ; celui ci est pour l'instant modélisé sous la forme d'un buffer en mémoire, dont la classe a déjà été créée par quelqu'un d'autre.

Pour certains traitements simple, comme la répétition puisqu'il faut prendre un exemple, il est aisé de connaître la taille que fera le buffer de sortie (c'est (Nbre2Repetitions+1)xTailleBufferEntrée). Par contre, pour d'autres, il m'est impossible de connaître cette taille avant d'avoir effectué tous les calculs sur le buffer d'entrée.

Ayant quelques (très) minces connaissances en C++/C, je me demande comment allouer un buffer de taille non fixe à sa création.

Note importante : je ne peux pas créer un buffer de taille 10000 par exemple, taille que je pourrais estimer être maximale par défaut, car mes signaux peuvent au maximum atteindre un longueur 2^42 !!!!

Avis aux idées, même folles, je suis preneur !!!

Merci & A+

4 réponses

batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
4 juil. 2003 à 13:17
regarde sur CCM dans la section C++, l'allocation dynamique en C++, c'est new pour allouer, delete pour libérer la mémoire.

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? :-D
8
arthix Messages postés 52 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 31 août 2006 5
8 juil. 2003 à 09:21
Salut !
La solution que j'ai adoptée :


int **Matrice;
Matrice = new int*[m_FacteurEtalement];
for(i=0;i<m_FacteurEtalement;i++) {
Matrice[i] = new int[m_FacteurEtalement];
}

et pour désallouer :

for(i=0;i<m_TailleCode;i++) {
delete [] Matrice[i];
}
delete [] Matrice;


C'est correct ?
Merci A+
6
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
8 juil. 2003 à 09:30
Ca me parait très bien.
@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
0
Patrick kamdem
4 juil. 2007 à 15:26
Salut Arthix,

voila la solution a ton probleme

int **Matrice;
Matrice = new int*[m_FacteurEtalement];
for(i=0;i<m_FacteurEtalement;i++) {
Matrice[i] = new int[m_FacteurEtalement];
}


et pour désallouer :
for(i=0;i<m_FacteurEtalement;i++) // et non for(i=0;i<m_TailleCode;i++)
{
delete Matrice[i]; // et non delete [] Matrice[i];
}
delete [] Matrice;

dit moi apres si il ya un truc que tu comprends pas.

Salutations,
Patrick kamdem
0
m_s > Patrick kamdem
22 août 2009 à 18:47
bonjour je viens d 'ellaborer un ptt programme qui simule le mvt d'1 ensble de prticules sur un reseau carre.je repere la position (x,y) de mon particule "p" par les indices i et j du site site[i][j]{x=i et y=j}
j'ai besoin d'utiliser des sommation et des produits avec des matrices geantes ([10000000]X[10000000])
svp comment realiser cette tache en utilisant catch et delete sous dev c++.
merci
0
gisele > Patrick kamdem
11 mars 2010 à 14:15
j aimerai avoir de plus amples explicatiosn a cette solution il ya des endroits qui me semblnte un peu flou
0
surfeurnet Messages postés 68 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 17 août 2005 5
7 juil. 2003 à 23:15
utile la fonction malloc()
Taille à allouer malloc(buffer)
pour libérer l'espace c'est la fonction free()
@++
2
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
8 juil. 2003 à 09:17
non. En c++, c'est new et delete...

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
0
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114 > batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008
8 juil. 2003 à 09:18
Le seul avantage en C++ d'utiliser les fonctions d'allocation dynamique en C est d'utiliser realloc... Mais tu n'en parles même pas :-)

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
0
je recharche comment programe en builderc++ miarse
-2