Утечка памяти с динамическим массивом переменных mpfr в переполнении стека

У меня есть простая программа на C ++, использующая библиотеку MPRR для нескольких задач, написанную, чтобы попытаться понять проблему с памятью в более крупной программе:

int main() {

int prec=65536, size=1, newsize=1;
mpfr_t **mf;

while(true) {

size=newsize;
mf=new mpfr_t*[size];
for(int i=0;i<size;i++) {
mf[i]=new mpfr_t[size];
for(int j=0;j<size;j++) mpfr_init2(mf[i][j], prec);
}

cout << "Size of array: ";
cin >> newsize;

for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) mpfr_clear(mf[i][j]);
delete [] mf[i];
}
delete [] mf;
}
}

Суть в том, чтобы объявлять массивы разных размеров и отслеживать использование памяти с помощью диспетчера задач (я использую Windows). Это прекрасно работает для размеров ~< 200, но если я объявляю что-то большее, память, кажется, не освобождается, когда я снова уменьшаю размер.

Вот пример запуска:
Я запускаю программу и выбираю размер 50. Затем я изменяю размеры между 50, 100, 150 и 200 и вижу, что использование памяти увеличивается и уменьшается, как и ожидалось. Затем я выбираю размер 250, и использование памяти возрастает, как и ожидалось, но когда я возвращаюсь к 200, оно не уменьшается, а увеличивается примерно до суммы значений памяти, необходимых для размера 200 и 250 соответственно. Подобное поведение наблюдается с большими размерами.

Есть идеи, что происходит?

0

Решение

Process Explorer даст вам более реалистичное представление об использовании памяти вашего процесса (виртуальный размер), чем диспетчер задач. Утечка памяти — это когда программа не освобождает память, и если это происходит постоянно, память никогда не перестанет расти.

Windows не обязательно освобождает память вашей программы обратно в саму систему — поэтому диспетчер задач и т. Д. Не скажет вам всей правды.

Для обнаружения утечек памяти в Visual Studio вы можете включить _CRTDBG_MAP_ALLOC макрос, как описано на эта страница MSDN.

Также этот вопрос немного говорит о том, как заставить его работать с C ++ new ключевое слово.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]