C++ C++;SIGSEGV错误

C++ C++;SIGSEGV错误,c++,segmentation-fault,C++,Segmentation Fault,代码给出了SIGSEGV错误。我怎样才能删除它?该代码将数组的元素相乘,并在每一步乘法中取模109+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

代码给出了SIGSEGV错误。我怎样才能删除它?该代码将数组的元素相乘,并在每一步乘法中取模109+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;
}
intmain()
{
int n;
INTA[10];
cin>>n;
对于(int i=0;i>A[i];
int ans=1;
int m=100000007;
对于(int i=0;icout在您的代码中,数组A被声明为10个元素。但是,之后要处理的元素数量会被询问给用户。此外,用户输入的第一个数字可能是负数或大于10。在这种情况下,您需要测试输入的值


除此之外,您可以使用std::vector而不是数组A来实现动态大小你可以设置向量的大小。剩下的代码在一些COM+变化中几乎保持不变。C++中的数组< < /P> < P>数组不会自动调整大小。结果,如果用户输入了<代码> N<代码> <代码> 10 > /代码>以上的值,则两个循环都试图访问数组的元素<代码> A<代码>结束。例如,如果
n
13
,则循环将访问名为
a
10
元素数组的
13
元素

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


鉴于这是一个家庭作业练习,我只想说,您需要找到一种方法,在阅读
n
之后,使用标准容器(如
std::vector
)动态分配一个包含
n
元素的数组是一种方法-但是,根据您的作业要求,可能不允许。在这种情况下,请查找运算符
new
delete
(不,我不会更具体-这是您的作业,不是我的)

您如何确保
A[I]
不在
A
之外读取?是否
n
小于或等于10?还盘:完全放弃阵列。将其替换为零。在收到数字时处理它们。我可能认为这是一项家庭任务,以了解阵列如何工作:)