繁体   English   中英

这是什么意思,我该如何纠正它***堆栈粉碎检测***:./ array1output终止

[英]What does this mean and how do I rectify it *** stack smashing detected ***: ./array1output terminated

这是代码。 为什么我要面对这个错误,我应该参考哪些信息来纠正这些错误,以便我知道'如果我这样做,我会得到'x'错误'

#include<stdio.h>
void main()
{
   int i,avg,sum;
   int marks[30]; // Array declaration

   for(i=0;i<31;i++)
   {
      printf("Enter Marks:");
      scanf("%d",&marks[i]); // Stores data in Array
   }

   for(i=0;i<31;i++)
      sum=sum+marks[i];

   avg=sum/30;
   printf("Average marks of student \t %d",avg);
}

无论何时在函数中声明变量,它都会在堆栈上分配内存。 堆栈是一个保留的内存区域,用于在函数内执行临时数据操作。 现在在您的代码中,您声明了3个int和一个具有30个插槽的int数组。 在你的for循环中,你将31个整数放入30个插槽中; 从0到30是31个数字。 最后一个数字超出了第30个插槽,因此“粉碎”到堆栈的下一个位置,换句话说就是覆盖它。 解决方案是将你for循环改为for(i=0;i<30;i++)

您已将int类型数组声明为[30],并尝试为其分配31个值。 请注意,数组从0开始。因此for循环应如下所述。 for(i = 0; i <30; i ++)因此问题,请更改for循环和休息在你的代码中都很好。 谢谢。 :)

#include<stdio.h>
void main()
{
int i, avg, sum=0;
int marks[30]; // Array declaration

for (i = 0; i<30; i++)
{
    printf("Enter Marks:");
    scanf("%d", &marks[i]); // Stores data in Array
}

for (i = 0; i<30; i++)
    sum = sum + marks[i];
    avg = sum / 30;
printf("Average marks of student \t %d", avg);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM