我创建了一个名为primes.h的头文件
我想要的是调用此头文件中定义的函数generate_primes(),以使用确定数量的素数填充数组。
因此,要测试一切是否正常,我首先从头文件的“内部”打印了数组的元素,直到一切正常。然后,我尝试从头文件之外的程序(包括头文件)中打印它们,但是它不起作用,并且程序在打印了几个元素后才停止。
为什么这种不当行为?以及我如何才能正确地做到这一点。
感谢您的帮助。

头文件:

int generate_primes(const unsigned long long n, unsigned long long*prime)
{

    try
        {
            prime = new unsigned long long[n];
        }
    catch(const std::bad_alloc&e) {
        std::cerr << e.what();
        exit(EXIT_FAILURE);
    }

    prime[0] = 2, prime[1] = 3, prime[2] = 5;

    unsigned long long p;
    unsigned long long index = 3;

    for (p = 7; index < n; p += 2)
        {
            short isPrime = 1;
            unsigned long long test_limit = (unsigned long long) sqrt(p);

            for (int i = 1; prime[i] <= test_limit && i < index; i++)
                {
                    if (!(p%prime[i]))
                        {
                            isPrime = 0;
                            break;
                        }
                }
            if (isPrime) prime[index++] = p;
        }

    //everything works fine when I print from inside the header file
    /*for (int i = 0; i < n; i++)
      {
      if (i && i % 7 == 0) std::cout << '\n';
      std::cout << prime[i] << "\t\t";
      }
    */
    return 1;
}


我的程序:

#include <iostream>
#include <cmath>
#include <vector>
#include <new>
#include <cstdlib>
#include "primes.h"

int main(){
    unsigned long long n = 100;//example
    unsigned long long *prime;
    generate_primes(n, prime);

    //but printing from here causes problems
    //isn't the array now filled after calling the above function ?
    for (unsigned long long i = 0; i < n; i++)
        {
            if (i && i % 5 == 0) std::cout<< '\n';
            std::cout << prime[i] << "\t";
        }

    return 0;
}

最佳答案

问题在于参数prime是通过值而不是通过引用传递的。因此,当generate_prime分配时:

prime = new unsigned long long[n];


这仅分配给局部变量prime,而不分配给调用方的变量。您需要通过引用传递参数,以便该分配对main()可见。

int generate_primes(const unsigned long long n, unsigned long long*&prime)

关于c++ - 头文件导致函数调用后原始数组出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45066253/

10-11 22:57