Я хотел бы знать, как лучше всего определить, создает ли следующий код утечки памяти, поскольку я понимаю, что вам нужно освободить память, когда вы закончите с ней, но в то же время этот массив или указатель на int вне сферы действия, когда функция возвращается, то не имеет значения, выпущу ли я ее или нет?Этот код генерирует утечку памяти или он чист?
Но в данном случае я не могу освободить память, не прерывая кучу по крайней мере в соответствии с майкрософт отладчика в Visual Studio 2010.
И для обучения, как лучше подойти к этому могли бы вы описать ваши пути проверки на память утечки.
Заранее спасибо
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int sieve(int n)
{
int *a = (int *) malloc(sizeof(int) * n);
int max = floor(sqrt((double)n));
int p = 2;
memset(a,0,sizeof(int) * n);
while(p<=max)
{
for(int i = 2 * p; i <= n; i+= p)
a[i] = 1;
while(a[++p]) /* Empty */ ;
}
while(a[n]) n--;
/* free(a); */ // free our array as we are done with it. but it generate a heap error
return n;
}
int main(void)
{
cout << sieve(100) << endl;
system("pause");
return 0;
}
у вас есть из доступа границ, поэтому, вероятно, ваша Высвобождение ошибка – Anycorn
нет времени для отладки это для вас, но Valgrind говорит, что есть память ошибка чтения/записи – kfmfe04
Вы можете посмотреть на 'alloca' - HTTP://www.mkssoftware.com/docs/man3/alloca.3.asp – sje397