C ++ SIGSEGV错误

时间:2017-02-28 06:10:25

标签: c++ sigsegv

代码给出了SIGSEGV错误。我该如何删除它?代码是乘法数组的元素,并且在乘法的每一步都以10 9 +7为模。

int main()
{
  int n;
  int A[10];
  cin >> n;
  for(int i = 0; i < n; i++)
    cin >> A[i];
  int ans = 1;
  int m   = 1000000007;
  for(int i = 0; i < n; i++)
  {
    ans = (ans * A[i]) % m;
  }
  cout << ans;
}

2 个答案:

答案 0 :(得分:0)

在您的代码中,数组A被声明为10个元素。但是,之后要向用户询问要处理的元素数量。此外,用户输入的第一个数字可能是负数或大于10.在这种情况下,您需要测试输入值。

除此之外,您可以使用std :: vector而不是数组A来获得动态大小。然后在用户给出了元素数量(使用第一个std :: cin)之后,您可以设置向量的大小。然后其余代码将保持几乎相同的一些化妆变化。

答案 1 :(得分:0)

C ++中的数组并没有神奇地调整自己的大小。因此,如果用户输入n 10或更多A的值,则两个循环都会尝试访问数组n之后的元素。例如,如果1313,则循环将访问名为10的{​​{1}}元素数组的A个元素。

这是未定义的行为。如果您的主机系统是某些unix变体(例如linux)并且操作系统检测到您的程序访问内存它不应该,它将向您的程序发送SIGSEGV信号,这会强制导致程序退出。然而,这只是许多人可能出现的症状之一。

鉴于这是一项家庭作业,我只是说你需要找到一种方法来动态分配一个带有n元素的数组 - 阅读n之后。使用标准容器(如std::vector<int>)是一种方法 - 但是,根据您的作业需要,可能不允许使用。在这种情况下,请查找运算符newdelete。 (不,我不会更具体 - 这是你的作业,而不是我的作业)