я не мог найти свой ответ с таким прибегая к помощи им просят здесь: Предположим, что у нас есть такой код, и мы не хотим перегружать конструктор копированияСколько утечек памяти у нас есть?
#ifndef ARRAY_H
#define ARRAY_H
class Array {
public:
Array(int = 10);
int* ptr;
int size;
}
#endif // ARRAY_H
и мы имеем:
#include <iostream>
#include "Array.h"
using namespace std;
Array::Array(int A)
{
size = (A > 0) ? A : 10;
ptr = new int[size];
for(int i=0; i<size; i++)
{ ptr[i] = i;}
}
и основной() является:
Array newArray1(10);
Array newArray2(8);
newArray2 = newArray1;
теперь наш профессор сказал, что мы должны болтаться здесь проблемы, потому что мы имеем тот же адрес для обоих новыйArray1 и новыйArray2
мой вопрос есть если мы удалим новыйArray1 память: есть ли мы утечка памяти кроме болтаться ??? что случилось с памятью ptr newArray2, которую ptr указывал на нее, прежде чем получить адрес newArray1 ??? эта часть памяти существует сейчас ??? и у нас есть другие проблемы с утечкой памяти ???
Помимо того факта, что вы никогда не вызываете delete [], вы также делаете мелкую копию, так что да, есть много проблем с этим кодом. Чтобы узнать, сколько у вас утечек памяти, подсчитайте количество вызовов (x = new [] - delete []). Таким образом, предполагая, что int составляет 4 байта, 72 байта никогда не очищались. –
благодарит Dr.jones за его хорошую формулу !!! – Arian
Dr.jones, кажется, мой вопрос не был достаточно прямым, я спросил о памяти newArray2 (8), я отредактировал свой вопрос, но спасибо, ответите мне, что я хотел – Arian