0

ここで私のプログラムで何が問題になっているのかよくわかりません。エラーなしでコンパイルされますが、最初の関数を正しく実行することさえできません。私は何人かの友人にこれを手伝ってくれるように頼もうとしましたが、彼らは役に立ちませんでした.

誰かが私を助けてくれることを願っています。

ヘッダー ファイル (sieve.h):

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <vector>
using namespace std;

void findPrimeNumbers(int**, int);
void printPrimes(int**, int);

void findPrimeNumbers(int **arr, int n)
{
    for (int x = 2; x < n; x++){
       cout << " x is " << x;
        if (arr[0][x] == 1){
        int z = arr[1][x];
        cout << " z = " << z;
        for (int y = 2 * z; y < 40; y += z){
                cout << " y is " << y;
                arr[0][y] = 0;
            }
        }
    }
}

void printPrimes(int **arr, int n)
{
    for (int x = 0; x < n; x++){
        if (arr[0][x] == 1) 
            cout << arr[1][x] << " is a prime number" << endl;
    }
}

メイン ファイル (sieve.cpp):

#include "sieve.h"

using namespace std;

int main()
{
    int n=1;
    cout << "Please enter the maximum value:" << endl;
    cin >> n;
    vector<int> sir(n);
    cout << "You have selected the maximum size as:" << endl;
    cout << n << endl;
    //allocate the array
    int row = n;
    int col = n;
    int** arr = new int*[row];
    for(int i = 0; i < row; i++)
    {
        arr[i] = new int[col];
    }
    findPrimeNumbers(arr, n);
    printPrimes(arr, n);
    for (int j = 0; j < n; j++)
    {
        cout << " " << arr[0][j];
    }
    //deallocate the array
    for(int i = 0; i < row; i++)
    {
        delete[] arr[i];
        delete[] arr;
    }
    return 0;
}

ほんの少しの助けでも大歓迎です!

4

2 に答える 2

0

ここに 1 つの問題があります。

//deallocate the array
for(int i = 0; i < row; i++)
{delete[] arr[i];
delete[] arr;}

arrループ内で削除しないでください。コードを適切にフォーマットすると、おそらくこの間違いに気付くでしょう - それは次のようになるはずです:

//deallocate the array
for(int i = 0; i < row; i++)
{
    delete[] arr[i];
}
delete[] arr;

理想的には、このような生の配列を使用するべきではありませんが、std::vector代わりに使用してください。

于 2013-09-24T20:44:36.837 に答える