c++ - 函数调用后头文件导致原数组出现问题

标签 c++ arrays header-files

我创建了一个名为 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/

相关文章:

c++ - 当用户输入大量数字时无限循环

c++ - std::string::clear() 与使用另一个字符串

arrays - 创建不同大小的数组的数组

c++ - 不同类型的嵌套容器

javascript - 为什么我在</script>上收到错误消息?错误是( Uncaught SyntaxError : Unexpected end of input)

javascript - lodash sortBy 然后 groupBy,顺序是否保持?

C++循环包含问题

c++ - 我在哪里可以找到 string.cpp 的来源

c - 将 .h 和 .c 文件改造为我已经在运行的 .c 程序

c++ - 如何获取 headers 作为 flex 和 bison 的输出?