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

你有一个问题:

//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 回答
0
int z = arr[1][x];

findPrimeNumbers函数中发生这种情况时,arr[1][x]尚未初始化,这意味着当您尝试读取该值时您有未定义的行为。

除此之外,您所做的事情并没有任何意义,而且似乎也不是埃拉托色尼筛法的实现。你不需要一个二维数组,你需要一个布尔值的一维数组。处理完成后,arr[N]应该是trueifN是质数,false如果不是。

于 2013-09-24T20:52:36.830 回答