[C++] Allocation dynamique [Fermé]

Signaler
Messages postés
54
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
3 septembre 2006
-
 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

Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
54
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
3 septembre 2006
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+
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Ca me parait très bien.
@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?

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
> 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
> Patrick kamdem
j aimerai avoir de plus amples explicatiosn a cette solution il ya des endroits qui me semblnte un peu flou
Messages postés
68
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 août 2005
5
utile la fonction malloc()
Taille à allouer malloc(buffer)
pour libérer l'espace c'est la fonction free()
@++
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
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 ?
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112 >
Messages postés
1877
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008

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 ?
je recharche comment programe en builderc++ miarse