En passant tableau d'objets composé d'autres objets comme référence aux fonctions en C ++?

voix
0

J'ai une fonction qui appelle elle-même 10 fois par seconde. J'utilise QTimer pour les appels répétés.

void DisplayClass::UpdateGuiWithData()

{

//miscellaneous code which is validated

SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2);

QTimer::singleShot(100,this,SLOT(UpdateGuiWithData()));

}


Class A_ComposingClass_B_Object

{

//boolean and enum variables

B ArrayOf_B_Objects[16];

}

Class B

{

//boolean and enum vairables

}

class DisplayClass

{

//variables that are not a concern here
UpdateGuiWithData();
A ArrayOfObject_A[4];

};

Class SingletonAsThread

{

//vairables that are not a concern here

UpdateFromGui(A_ComposingClass_B_Object*,const bool&,const bool&);

};

Voici l'affaire quand je lance le code tel qu'il est, il y a une augmentation constante de la taille de la mémoire, mais quand je commente l'appel à l'appel UpdateFromGui en classe UpdateGuiWithData, la mémoire reste à un niveau constant d'environ 51 MB. La fonction UpdateFromGui n'a pas d'allocation dynamique de mémoire ou des fonctions graphiques. Il est juste un avion qui construit la fonction jane le paquet à écrire au port série et est appelé 10 fois par seconde puisque c'est le taux de rafraîchissement du matériel.

La seule raison pour laquelle je pouvais penser à l'augmentation de la mémoire passe le tableau d'objets à chaque appel à la fonction UpdateFromGui. Je pense à chaque appel , nous créons une copie des objets de classe et d' où l'augmentation de la mémoire. Ensuite , j'ai essayé d'utiliser le tableau en passant d'objets comme référence à la fonction mais n'a pas pu trouver une déclaration appropriée pour une telle fonction, bien que je trouve la définition et l' utilisation d'une telle fonction. Voici ce que je trouve sur le net.

// réseau de réception par référence.

void GetArray( int (&Array) [10] )

{

}

// Test array by reference.

void CRabbitDlgDlg::TestArray()

{

    // Pass array by reference.

    int Array[10] = { 0 };

    GetArray( Array );

}

Ma question sont

---> Est-ce que je pense sur la ligne droite ou est-ce quelque chose à voir avec l'appel répété à singleton

objet de classe?

---> Aussi je fais besoin d'un constructeur de copie ici pour la classe A, mais il n'y a pas dynamique

allocation ou des variables pointeur dans cette classe?

---> Que peut-être la source de cette fuite de mémoire (sinon pas de son constructeur de copie ou d'appels singleton) qui augmente en permanence l'utilisation de la mémoire

de l'application?

Créé 27/08/2009 à 05:57
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Les tableaux en C et C ++ ne fonctionnent pas de la façon que vous avez décrit. Ce que nous appelons un « tableau » est juste une zone de mémoire, où sont placés des objets à côté de l'autre, et le pointeur qui pointe vers premier objet. Lorsque vous passez un pointeur à une fonction, vous passez juste un seul numéro entier. Aucun objet il pointe est copié et il garde pointant vers le même espace contigu de mémoire.

Ce que vous rencontrez est une véritable fuite de mémoire. Vous allouer de la mémoire quelque part et oubliez de le libérer, quand il est plus nécessaire. Ou vous entrez récursion où vous ne vouliez pas, et chaque fonction alloue de la mémoire dans la pile.

Et votre clode est mal présenté - Je ne peux pas trouver des déclarations, dont vous parlez juste après la fenêtre de code.

Créé 27/08/2009 à 07:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more