1

Voila, j'ai un peu souci qui me bloque dans l'utilisation des classes en C++

Mon progamme charge des fichiers videos, et j'aimerai charger le contenu du fichier video dans une classe, et ainsi pouvoir liberer la memoire assignée a la video juste en detruisant la dite classe.
J'aimerais aussi aussi que l'espace alloué a la video soit dépendant de la taille du fichier.

Mais, mon compileur n'accepte pas:

class uneVideo
{
int stokageDuFichier* = new int[20000000];
...


}

Il grogne a cause du "new"

200000000 d'integers etant la taille maximale d'un fichier video que je charge.

Comment pourrais-je allouer de l'espace memoire d'une taille inconnue lors de la redaction du code a une classe?

Merci de vos suggestions smile

2

Pourquoi allouer la mémoire?!

Le but des pointeur est justement de ne pas allouer tant que l'ont ne connais pas la taille de la donnée à stocker.
De plus la taille réglementaire d'un int (respect strict du K&R) est de 16 bit soit 2 octets, donc tes 200000000 case donne du 381 Mo ... c'est énorme.

Ensuite d'un point de vue strictement logique de programmation objet, il est tout à fais aberrant de faire des initialisation à la déclaration des variable, ces initialisations s'effectues dans des méthodes (généralement dans le(s) constructeur(s)).

Edit:
Je n'ai pas relevé la synthaxe tout de suite...

int nom_de_variable signifie que tu instancie un int
int * variable signifie que tu déclare un pointeur sur un int

ce que tu voulais faire était sans doute ceci:
type * var = new type ....

Je crois que tu confond pointeur et valeur pointé.

3

les 2000000000, ce n'est pas la valeur que j'utilise, j'ai redigé ces qques lignes de codes de mémoire. Dans mon code, le * est effectivement placé juste apres "int".

Pour le moment, j'utilise un seul gros tableau, que je déclare en variable globale:
unsigned short* K2X = new unsigned short[9380000];
ce qui occupe envron 25 Mo.

C'est dans cet unique tableau que je charge toutes les videos pour lesquelles que veux un acces tres rapide (pour mixer les videos entre elles)
Mais justement, j'ai enormement de pointeurs a gérer sur cet array, mon code en devient trop confus.
De plus, je ne sais pas comment vider ce tableau, pour restituer toute la memoire qui a pu y etre entassée: je ne peux utiliser "delete" puisqu'il est déclaré en global...

Si tu faisait un "photoshop", avec lequel tu peux ouvrir plusieurs images simultanément, comment gererais-tu la RAM occupée par les documents ouverts?

Merci smile

4

hum il te faudrait un garbage collector avec des pointeur intelligent.
Je ne suis pas grand adorateur des global, je préfère avoir 15 référence vers l'objet que de l'avoir en global.

mais tu peux toujours faire une class video avec un pointeur sur un tableau comme tu veux et une méthode qui le delete si t'as pas envie d'utiliser le destructeur...

(et si je ne me goure pas dans ton cas il te faut utiliser delete[] et non delete ... je sais c'est un détails mais bon)