c ++分段错误:为什么这个程序给出了运行时错误(SIGSEGV)

时间:2017-10-31 11:59:35

标签: c++ runtime-error sigsegv

此代码在代码块中运行良好,但在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;
}

1 个答案:

答案 0 :(得分:0)

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

有些事情可以尝试:

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

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

确保你没有声明太多记忆。保证64 MB,但是大小为[10000] [10000]的数组将无法工作。

确保您没有声明过多的堆栈内存。任何大型数组都应该在任何函数之外全局声明 - 在函数内部放置一个100000个int的数组可能不起作用。

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

分段错误的其他一些原因是:

  1. 使用未初始化的指针

  2. 取消引用NULL指针

  3. 访问程序不拥有的内存。

  4. 您可以在此处找到有关分段错误的更多详细信息。 click here

    同时检查您的while循环代码。