如何解决 codechef 中的 SIGEMT 运行时错误?

How do I resolve SIGEMT runtime error in codechef?

我在以下代码的 codechef 编译器中收到 SIGEMT 错误: 当我 运行 在我的电脑上离线使用相同的代码时,它工作正常。我已经读到这是由于 long long int 的高内存使用率而发生的,但是当我将其更改为 int 时,我得到的是 SIGTSTP 错误,这表明内存不足。

#include <iostream>
using namespace std;

int main() {
    long long int t, i, j, count = 0;
    int flag = 0, gflag = 0;
    cin>>t;
    while(t--) {
        long long int n;
        cin>>n;
        long long int arr[n];
        for(i = 0; i<n; i++) {
            cin>>arr[i];
        }

        for(i = 0; i<n-1; i++) {
            count = 0;
            flag = 0; gflag = 0;
            if(arr[i] == 1) {
                for(j = i+1; j<n; j++) {
                    if(arr[j] == 1) {
                        gflag = 1;
                        break;
                    }
                    count++;
                }
            }

            if(count<5 && gflag == 1) {
                    cout<<"NO\n";
                    flag = 1;
                    break;
            }
        }
        if(flag == 0)
        cout<<"YES\n";
    }
return 0;
}

请帮忙。谢谢。

SIGEMT 是模拟器陷阱。它是由某些未实现的指令(即您试图给出 GNU 库中未实现的指令)导致的,这些指令可能会在软件中模拟,或者操作系统未能正确模拟它们。

为了内存space问题在codechef博客上提到了一个hack,尝试在main()函数之前声明你的变量,这样你会得到一个在堆上声明的全局变量。

https://discuss.codechef.com/t/why-do-i-get-run-time-error-sigemt/15957