関数呼び出しの後、元の配列に問題が発生します数字。すべてが正常に動作している場合 は、だから私は、最初の「内部」ヘッダファイル」ウィッヒが正常に動作しますから、配列の要素を印刷し、テストします。それから私は、ヘッダファイルを含むプログラムでは、ヘッダファイルの外からそれらを印刷しようとしたが、それは働いていないと、プログラムはわずか数の要素を印刷した後に停止します。 この不正な動作はなぜですか?そして、私はこれをどうやって正しい方法で行うことができますか? ありがとうございました。ヘッダファイルは、私は私がしたいことは首相の決定された数と配列を埋めるために、このヘッダファイルで定義された関数generate_primes()を呼び出すことです primes.hというヘッダーファイルを作成し
ヘッダファイル:
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;
}
は、ヘッダファイルに関数定義を入れないでください。 – Barmar
インデントは、これを間違って無視するべきではありません。 – tadman
あなたのプログラムの実際の出力は? –