Rechercher : dans
Par :

[C++] Allocation dynamique

Dernière réponse le 22 aoû 2009 à 18:47:58 arthix, le 3 jui 2003 à 16:15:15 
 Signaler ce message aux modérateurs

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+

Meilleures réponses pour « [C++] Allocation dynamique » dans :

1

batmat, le 4 jui 2003 à 13:17:37

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

Répondre à batmat

2

surfeurnet, le 7 jui 2003 à 23:15:10

Utile la fonction malloc()
Taille à allouer malloc(buffer)
pour libérer l'espace c'est la fonction free()
@++

Répondre à surfeurnet

3

batmat, le 8 jui 2003 à 09:17:24

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 ?

Répondre à batmat

4

batmat, le 8 jui 2003 à 09:18:41

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 ?

Répondre à batmat

5

arthix, le 8 jui 2003 à 09:21:24

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+

Répondre à arthix

6

batmat, le 8 jui 2003 à 09:30:26

Ca me parait très bien.
@++

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

Répondre à batmat

7

Patrick kamdem, le 4 jui 2007 à 15:26:28
  • +1

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

Répondre à Patrick kamdem

8

 m_s, le 22 aoû 2009 à 18:47:58

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

Répondre à m_s