首页 > 解决方案 > 素数分解问题中的信号 11

问题描述

显然我正在尝试访问尚未分配的内存地址。有人可以告诉我在哪里吗?(对 n 个给定数进行质因数分解的程序)

#include <iostream>

using namespace std;

void sieve(int n){
    int primes[n + 1];
    for(int i = 2; i <= n; i++){
        primes[i] = i;
    }
    for(int i = 2; i <= n; i++){
        if(primes[i] == i){
            for(int j = i*i; j <= n; j += i){
                if(primes[j] == j){
                    primes[j] = i;
                }
            }
        }
    }
    while(n != 1){
        cout << primes[n] << " ";
        n /= primes[n];
    }
    cout << endl;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie();
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        int x;
        cin >> x;
        sieve(x);
    }
}

标签: c++memory-management

解决方案


这个循环非常可疑:

while(n != 1){
    cout << primes[n] << " ";
    n /= primes[n];
}

你有多确定 n 不会变成 0?而且您还没有将 primes[0] 初始化为任何东西,因此它可以是任何随机值。在那一点上,n 变成了谁知道什么,你就在 la-la 的土地上。


推荐阅读