C++ c++;分段错误:为什么该程序给出运行时错误(SIGSEGV)

C++ c++;分段错误:为什么该程序给出运行时错误(SIGSEGV),c++,runtime-error,segmentation-fault,C++,Runtime Error,Segmentation Fault,此代码在代码块中运行良好,但在codechef的编译器中出现运行时(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=

此代码在代码块中运行良好,但在codechef的编译器中出现运行时(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;
}
#包括
使用名称空间std;
int main(){
int t;
长n;
cin>>t;
而(t--){
cin>>n;
int i=2,m=0,j=0,a[n/2];

而(i这是由无效内存引用或分段错误引起的错误。最常见的原因是访问数组元素超出范围,或使用了太多内存

您可以尝试以下几点:

确保您没有使用未初始化的变量。这些变量可能在您的计算机上设置为0,但不能保证在法官席上

检查每次访问数组元素的情况,看看它是否可能超出范围

请确保您没有声明太多内存。64 MB是有保证的,但拥有[10000][10000]大小的数组永远不会起作用

确保没有声明太多的堆栈内存。任何大型数组都应该在任何函数之外全局声明-将100000个整数的数组放入函数中可能不起作用

要克服此问题,请尝试使用静态内存分配。

分段故障的其他一些原因有:

  • 使用未初始化的指针

  • 空指针的解引用

  • 访问程序不拥有的内存

  • 您将在此处找到有关分段错误的更多详细信息


    还要检查您的while循环代码。

    您是否进行过调试?您是否查找了Segfault是由什么引起的?它在哪里失败了,您是如何修复的?我在这段代码中没有看到任何分段错误。但我认为值得一提的是,在某些编译器中,您需要为声明其他数组提供常量值当元素数量不是常数表达式时,原始数组声明不是标准C++(例如,代码> A[N/2)(代码> N< /代码>不是常量表达式)。这可能会导致问题,但无论哪种方式,都不标准,应该避免。(以及C++有容器类的原因之一)@如果一个原始数组不能在标准C++中声明,当元素的数目不是常数表达式时,请使用类来说明方法……非常感谢,但我在Web上也发现了这种理论。请告诉我为什么这个程序中的代码会给出这样的错误。