[C++] Allocation dynamique

arthix Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
 c+ -
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   Statut Membre Dernière intervention   114
 
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 53 Date d'inscription   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   114
 
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
 
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
 
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
 
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   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   114
 
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   Statut Membre Dernière intervention   114 > batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention  
 
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
c+
 
je recharche comment programe en builderc++ miarse
-2