C++ SIGSEGV error

C++ SIGSEGV error

本文关键字:error SIGSEGV C++      更新时间:2023-10-16

代码给出sigsegv错误。如何删除它?该代码是在乘法的每个步骤中乘以数组的元素和Modulo 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;
}

在您的代码中,数组a被声明为10个元素。但是,之后向用户要求处理的元素数量。另外,用户所划分的第一个数字似乎是负数或大于10。在这种情况下,您需要测试诱因的值。

除此之外,您还可以使用std ::矢量而不是数组a作为动态大小。然后,用户给出了元素量(使用第一个std :: cin)之后,您可以设置向量的大小。然后,其余代码将在某些化妆品更改中保持几乎相同。

C 中的数组不会神奇地调整自己的大小。结果,如果用户输入10或更多n的值,则两个循环都将尝试访问数组A的末端的元素。例如,如果n13,则循环将访问名为A10元素数组的13元素。

那是不确定的行为。如果您的主机系统是一些UNIX变体(例如Linux),并且操作系统可检测您的程序访问内存,则它将向您的程序发送SIGSEGV信号,该信号强行导致程序退出。但是,这只是许多可能的症状。

鉴于这是一项家庭作业练习,我只想在阅读n之后,需要解决一种用n元素动态分配数组的方法。使用标准容器(例如std::vector<int>)是一种方法 - 但是,根据您的作业要求,可能不允许使用。在这种情况下,查找操作员newdelete。(不,我不会更具体 - 这是您的作业,不是我的)