首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小程序中的g++内部编译器错误

小程序中的g++内部编译器错误
EN

Stack Overflow用户
提问于 2013-09-01 20:18:35
回答 2查看 1.9K关注 0票数 1

我正在编写一个小程序来解决Project 问题21,当我遇到一个无法解释的内部编译器错误时,我正在测试我的代码的早期部分。我希望有任何关于如何重写我的程序以避免这种错误的提示。

下面是构建命令和编译器选项:

代码语言:javascript
复制
g++ -std=c++11 -O2 -Wall -o "pe_021" "pe_021.cc"

以下是我得到的错误:

代码语言:javascript
复制
Internal compiler error: Error reporting routines re-entered.  
Compilation failed.

这是我的密码:

代码语言:javascript
复制
#include <array>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

const unsigned int N = 10000; //look for amicable numbers smaller than N
vector<unsigned int> list_of_primes;

vector<unsigned int[2]> prime_factorize(unsigned int);

int main(int argc, char **argv)
{
    //import a list of primes
    ifstream ifs ("primes_10000.txt");
    for (unsigned int index = 0; index < N; index++) {
        string prime_number;
        getline(ifs, prime_number);
        list_of_primes.push_back(stoi(prime_number));
    }
    ifs.close();

    //test prime factorization function by prime factorizing 12
    vector<unsigned int[2]> prime_factorization = prime_factorize(12);
    for(unsigned int (&prime_and_exponent)[2] : prime_factorization) {
        cout << prime_and_exponent[0] << ", " << prime_and_exponent[1] << endl;
    }

    return 0;
}

vector<unsigned int[2]> prime_factorize(unsigned int number)
{
    vector<unsigned int[2]> prime_factorization;
    for(unsigned int index = 1; index < list_of_primes.size(); index++) {
        if(number % list_of_primes[index] == 0) {
            unsigned int prime_and_exponent[2] = {list_of_primes[index], 1};
            prime_factorization.push_back(prime_and_exponent);
            number /= list_of_primes[index];

            while(number % list_of_primes[index] == 0) {
                prime_factorization.back()[1]++;
                number /= list_of_primes[index];
            }
        }
        if(number == 1) {
            break;
        }
    }
    return prime_factorization;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-01 20:32:28

这个错误是由行引起的。

代码语言:javascript
复制
  prime_factorization.push_back(prime_and_exponent);

似乎把数组放入向量会导致崩溃,至少在GCC 4.7.3中是这样。首先,发送错误报告给GCC的开发人员。第二,将您的unsigned int[2]打包到类中,我认为这应该有效。

UPD:正如注释中指出的,将数组放入向量是非法的。

票数 3
EN

Stack Overflow用户

发布于 2013-09-01 22:33:10

unsigned int[2]代替pair<unsigned int,int unsigned>。你会更快乐的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18562511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档