Bonjour,
j'ai une fonction avec dedans :
Est-ce que je crée une fuite mémoire ? le tableau test sera bien supprimé ?Code:
1
2
3
4 short test[50]; short *test2 = test; test2 += 4;
Version imprimable
Bonjour,
j'ai une fonction avec dedans :
Est-ce que je crée une fuite mémoire ? le tableau test sera bien supprimé ?Code:
1
2
3
4 short test[50]; short *test2 = test; test2 += 4;
Tu n'as alloué que des variables sur la pile et aucune sur le tas, tu ne cours donc aucun risque de fuite mémoire.
En écrivant :
tu as créé un tableau nommé test de 50 short et tu l'as créé sur la pile. C'est donc une variable dite automatique qui sera détruite automatiquement quand elle sortira de sa portée.Code:
1
2 short test[50];
Cela ne t'empêche effectivement pas de faire pointer un pointeur dessus.
Au vu de ta question, on voit que tu penses : "pointeur donc fuite mémoire possible".
Cela est vrai quand ton pointeur pointe sur une mémoire allouée dynamiquement (sur le tas donc) à l'aide de new.
Par exemple tu aurais pu allouer ton tableau dynamiquement comme ceci :
Et là oui tu risques une fuite mémoire si tu ne désalloues pas la mémoire pointée par test.Code:short *test = new short[50];
Pour la désallouer, il suffit de faire
Code:delete[] test;
Bonjour,
pourquoi penses-tu avoir une fuite mémoire ? Tu n'as aucune allocation mémoire explicite.
test est crée sur la pile, il sera supprimé dès qu'on sort de sa portée
test2 est juste un pointeur sur le premier élément de test, le décaller de 4 revient à écrire test2 = &test[4];ton pointeur là est juste un allias sur test