2

私は現在素数ファインダーを構築しており、メモリの問題があります:

これは、ヒープの破損が原因である可能性があります。これは、PrimeNumbers.exe または読み込まれた DLL のバグを示しています。

PS。これが素数を見つける方法ではない場合は、私に言わないでください。私は自分でそれを理解したいのです!

コード:

// PrimeNumbers.cpp : main project file.

#include "stdafx.h"
#include <vector>

using namespace System;
using namespace std;

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Until what number do you want to stop?");
signed const int numtstop = Convert::ToInt16(Console::ReadLine());
bool * isvalid = new bool[numtstop];


    int allattempts = numtstop*numtstop; // Find all the possible combinations of numbers

    for (int currentnumb = 0; currentnumb <= allattempts; currentnumb++) // For each number try to find a combination
    {
        for (int i = 0; i <= numtstop; i++)
        {
            for (int tnumb = 0; tnumb <= numtstop; tnumb++)
            {
                if (i*tnumb == currentnumb)
                {
                    isvalid[currentnumb] = false;
                    Console::WriteLine("Error");
                }
            }
        }
    }

    Console::WriteLine(L"\nAll prime number in the range of:" + Convert::ToString(numtstop));

    for (int pnts = 0; pnts <= numtstop; pnts++)
    {
        if (isvalid[pnts] != false)
        {
            Console::WriteLine(pnts);
        }
    }

return 0;
}

メモリの問題はわかりません。

助けてください。

4

4 に答える 4

5

ブール値を割り当てnumtstopていますが、0 から までの範囲の変数を使用してその配列にインデックスを付けていますnumtstop*numtstopnumstopこれは、より大きいすべての値の範囲外です1

より多くのブール値 ( ) を割り当てるかnumtstop*numtstop、別の変数を使用してインデックスを作成する必要がありますisvalid(たとえば、からまでiの範囲)。申し訳ありませんが、素数を見つけるアルゴリズムについてコメントしないようにというあなたの要求のため、これ以上正確なことは言えません。 0numstop


PS小さな素数を見つけるというトピックについて何かを読みたい場合は、ダイクストラによる素晴らしい本へのリンクがあります。彼は、35 ~ 49 ページで、最初の 1000 個の素数に対するプログラムの作成方法を教えています。

于 2012-07-06T10:15:34.590 に答える
0

delete[]これはisvalidメモリ リークです。

于 2012-07-06T10:17:26.447 に答える
0

問題は、マネージド C++/CLI コードでネイティブ C++ を使用していることです。もちろん、削除せずに新しいものを使用してください。

于 2012-07-06T10:13:36.383 に答える
0
`currentnumb` :   

は配列のサイズよりも大きく、これはnumtstop. あなたはおそらく限界を超えています。これがあなたの問題かもしれません。

于 2012-07-06T10:15:14.147 に答える