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



此代码在代码块中运行良好,但在代码厨师的编译器中出现运行时(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;
}

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

一些东西供您尝试:

确保您没有使用尚未初始化的变量。这些可能在你的电脑上设置为0,但不能保证在法官身上。

检查访问数组元素的每一次出现,看看它是否可能越界。

确保你没有声明太多的内存。64 MB是有保证的,但拥有[10000][10000]大小的数组是行不通的。

请确保您没有声明过多的堆栈内存。任何大数组都应该在任何函数之外全局声明——在函数中放入100000 int的数组可能不会起作用。

为了克服这个问题,请尝试使用静态内存分配

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

  1. 使用未初始化的指针

  2. 取消引用NULL指针

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

您将在此处找到有关分段故障的更多详细信息。点击此处

还要检查while循环代码

相关内容

  • 没有找到相关文章

最新更新