C++工作室 2024-05-25 20:03 采纳率: 0%
浏览 6

罕见报错!GCC出问题了?!


#include <iostream>
#include <algorithm>
using namespace std;

const int MAXN = 2000001;

int a[MAXN] = {-1};
int p[MAXN] = {-1};

int main() {
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= m; i++) {
        cin >> p[i] >> a[i];
    }

    int ans = 0, money = 0;
    while (true) {
        int maxn = 0, minn = 99999999, idmax = -1, idmin = -1;
        for (int i = 1; i <= m; i++) {
            if (p[i] == -1) continue;

            int t = p[i] * a[i];
            if (t > maxn) {
                maxn = t;
                idmax = i;
            }

            if (t < minn) {
                minn = t;
                idmin = i;
            }
        }

        if (ans >= n || idmin == -1) {
            cout << money << endl;
            break;
        }

        if (ans + a[idmin] <= n) {
            ans += a[idmin];
            money += p[idmin];
        } else {
            p[idmin] = -1;
        }
    }

    return 0;
}


img


这是什么报错?!

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-25 20:04
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试编译一个C++程序,但遇到了“内部编译器错误:文件大小限制超出”的错误。这个错误通常发生在编译过程中生成的中间文件(如.o或.obj文件)超过了系统的最大允许大小。

    解决这个问题的方法有几种,这里我会提供一些可能的解决方案:

    1. 增加系统内存或调整编译器设置 如果你的系统内存足够大,可以尝试增加堆栈大小。在编译时添加 -Wl,-stack_size=67108864 或者类似选项可能会有所帮助。这会告诉链接器分配更大的堆栈空间。例如,使用下面的命令重新编译:

      g++ -std=c++11 -O2 -Wl,-stack_size=67108864 your_program.cpp -o your_program
      
    2. 分解代码 尝试将大型程序分解成几个较小的模块,然后分别编译它们。这样可以在编译每个模块时减少对内存的需求。

    3. 检查是否有不必要的递归或循环 确保你的代码中没有无限递归或导致巨大递归深度的问题。这可能是造成堆栈溢出的原因之一。

    4. 使用更现代的编译器版本 更新到最新版的GCC可能会解决此问题,因为这可能是由于旧版本编译器中的bug引起的。

    5. 减少编译时的优化级别 有时高优化级别可能导致编译器生成较大的中间文件。降低优化级别,比如从-O3降到-O2,看是否能解决问题。

    6. 提交报告 如果上述方法都无法解决问题,并且你确定这不是代码问题,那么你可以按照错误信息提示,提交一份完整的bug报告给GCC开发者。他们可能会找出并修复这个问题。

    请尝试这些步骤看看是否能解决问题。如果你仍然遇到困难,可能需要提供更多关于你的环境、项目规模以及编译配置的信息以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月25日