【发布时间】:2018-04-12 14:11:51
【问题描述】:
此代码在代码块中运行良好,但在 codechef 的编译器中出现 Runtime(SIGSEGV) 错误 请通过下面的代码并告诉解决此错误的方法。谢谢。
#include<iostream>
using namespace std;
int main(){
int t;
long n;
cin>>t;
while(t--){
cin>>n;
int i=2,m=0,j=0,a[n/2];
while(i<=n/2){
if(n%i==0){
n=n/i;
a [ j++ ] = i;
m++;
i = 2;
}
else i++;
a[j] = n;
}
cout << m+1 << endl;
for(int i=0;i<=m;i++)
cout << a[i] << endl;
}
return 0;
}
【问题讨论】:
-
你做过调试吗?你查过 Segfault 是由什么引起的吗?
-
哪里出了问题,你为解决这个问题做了哪些努力?
-
我在这段代码中没有看到任何分段错误。但我认为值得一提的是,在某些编译器中,您需要提供常量值来声明数组,否则会出现编译器错误。
-
当元素的数量不是常量表达式时,原始数组声明不是标准的 C++(例如,
a[n/2],其中n不是常量表达式)。这可能会导致问题,但无论哪种方式都不是标准的,应该避免(这也是 C++ 具有容器类的一个原因)。 -
@crashmstr 如果在标准 C++ 中无法在元素数量不是常量表达式时声明原始数组,那么请建议使用类的方法...
标签: c++ runtime-error segmentation-fault