进程终止,状态为-1073741510-C ++ Prime因数分解

问题描述

我正在编写用于数字的素因式分解的代码,但是遇到进程以状态-1073741510 终止的程序,我无法运行我的程序,我是计算机科学的新手。请在下面找到我的代码

PrimeFactorize函数

int primeFactorize(int n) {
  if (isPrime(n)) {
    cout<<n;
  }

  for(int i = 2; i < sqrt(n); i++) {
    if(!isPrime(i))
        continue;
    while(n % i == 0) {
        cout<<i;
        n /= i;
    }
  }
}

isPrimeMethod

bool isPrime(int n) {
  if (n <= 1) {
    return false;
  }
  for(int i = 2; i <= sqrt(n); i++) {
    if (n % i == 0)
        return false;
  }
  return true;
}

主要方法

int main() {
  cout<<primeFactorize(100);
  return 0;
}

解决方法

您的功能

int primeFactorize(int n);

不返回任何内容。因此,这句话

cout<<primeFactorize(100);

调用未定义的行为。

您应该通过以下方式更改函数声明

std::vector<int> primeFactorize(int n);

在函数中,而不是输出质数,应在向量中传递它们。例如

  for(int i = 2; i < sqrt(n); i++) {
    if( isPrime(i)) {
        while(n % i == 0) {
            v.push_back( i );
            n /= i;
        }
    }
  }

该函数必须返回向量。

主要可以输出获得的向量。

,

在您的代码中,特别是函数:int primeFactorize(int n)在体内不返回什么。会调用未定义行为

需要返回某种排序的int值。返回 value 的函数称为 value-returning函数

在使用数据类型时,例如intdoublebool,它们都需要结束返回各自的数据输入回到调用该函数的语句。

特别是对于您的代码,它甚至不应该具有返回值的功能。相反,它应该仅使用voidvoid很简单,不会返回一个值。

更改此片段:

int primeFactorize(int n)

收件人:

void primeFactorize(int n)

应该解决您的问题。

,

您会感到困惑,这些函数会返回某些内容(例如isPrime),而某些函数会输出一些内容却什么都不返回(例如primeFactorize)。打印与返回不同。您可以说primeFactorize不返回任何内容,因为其中没有return ...;语句。

不返回任何内容的函数应这样声明void

void primeFactorize(int n)
{
    ...
}

然后应该更改main,以便不要尝试打印primeFactorize的返回值(不再存在)。

int main()
{
    primeFactorize(100);
    return 0;
}