如何解决 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
我在以下代码的 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