c++ 程序 return "0 0" 而不是 returning 质数。为什么它不能从 "prime" 函数得到正确的输出?

c++ program return "0 0" instead of returning prime numbers. Why does it not get the correct output from the "prime" function?

我的函数“prime”接受一个动态数组和 returns 一个仅由质数组成的动态分配数组。但是当它返回到 main 时,它给出了错误的输出和 print

输出:

0 0

预期输出:

2 3

我的代码:

#include<stdio.h>
#include<math.h>
#include <cstdio>
#include<iostream>
using namespace std;
const int capacity = 10000;
int * prime(int numbers[capacity])
{
    int *primeArray;
    primeArray = new int[capacity];
    int lenghtOfArray=sizeof(primeArray)/sizeof(int); 
    int counter = 0;
    for(int index=0;index<lenghtOfArray;index++){
    // 0 and 1 are not prime numbers
    if (numbers[index] == 0 || numbers[index] == 1) {
        continue;
    }
    else {
        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                primeArray[counter] = numbers[index];
                counter = counter + 1;
                break;
            }
        }
    }
    }
    return primeArray;
}


main()
{
    int *mynumbers;
    mynumbers = new int[capacity];
    mynumbers[0] = 1;
    mynumbers[1] = 2;
    mynumbers[2] = 3;
    mynumbers[3] = 4;
    mynumbers[4] = 5;
    mynumbers[5] = 6;
    int* myprime = prime(mynumbers);
    cout << myprime[0] << " " << myprime[1];
}

出了什么问题?

    int lenghtOfArray=sizeof(primeArray)/sizeof(int); 

是获取动态分配数组长度的错误方法。

sizeof(primeArray)不是分配的大小而是指针的大小

你已经有了数组元素的数量,所以用它来得到数组的长度:

    int lenghtOfArray=capacity;

但这并不能使您的代码正确,因为现在您的代码将使用 int 数组的未初始化元素的不确定值。你要做的就是将有效元素的数量传递给函数。

要更改的点数:

// add argument to pass the number of data
// int * prime(int numbers[capacity])
int * prime(int numbers[capacity], int num_numbers)
{
    int *primeArray;
    primeArray = new int[capacity];
    // use the passed number
    // int lenghtOfArray=sizeof(primeArray)/sizeof(int); 
    int lenghtOfArray=num_numbers; 
    // pass the number of data
    // int* myprime = prime(mynumbers);
    int* myprime = prime(mynumbers, 6);
    cout << myprime[0] << " " << myprime[1];
}

另一点是您的代码存储的不是质数而是质数。

而不是这个

        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                primeArray[counter] = numbers[index];
                counter = counter + 1;
                break;
            }
        }

你应该使用这个

        // add the number for now
        primeArray[counter] = numbers[index];
        counter = counter + 1;
        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                // it is not actually a prime, rollback
                counter = counter - 1;
                break;
            }
        }