次のコードがメモリリークを生成しているかどうかを判断する最善の方法を知りたいのですが、メモリを解放する必要があることを理解していますが、同時にこの配列または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のあなたは 'alloca'で見たいと思うかもしれませんメモリの読み取り/書き込みエラー – kfmfe04
があると言う - のhttp:/は/www.mkssoftware.com/docs/man3/alloca.3.asp – sje397