为什么即使在获得输出后IDEone也会显示运行时错误?

时间:2016-07-30 17:25:44

标签: c++ runtime-error

我的计划有什么问题? 它在我的电脑上工作正常但在IDEone中它提供了正确的输出,但显示运行时错误。请帮忙。

#include<bits/stdc++.h>

using namespace std;

struct student
{
    int vote;
};


int main()
{
  int t;
  cin>>t;

  while(t--)
  {
      int count=0;
      int n;
      cin>>n;
      vector <int> a(n);
      student s[n];
      int k;
      cin>>k;

      for(int i=1;i<=n;i++)
      {
           s[i].vote=0;
      }


      for(int i=1;i<=n;i++)
      {
           cin>>a[i];
      }
      int temp=0;

      for(int i=1;i<=n;i++)
      {
          if(a[i] != i)
          {
              temp=a[i];
              s[temp].vote++;
          }
      } 

      for(int i=1;i<=n;i++)
      {
          if(s[i].vote==k)
          {
              count++;
          }
      }

          printf("%d\n",count);

         }
return 0;
}

这是IDEone中显示的错误: -

  <。>`。/ prog'出错:free():下一个大小无效(快):0x085cca10

2 个答案:

答案 0 :(得分:1)

  student s[n];

这声明了一个名为s的数组。它包含n个值。值为s[0]s[n-1](如果您愿意,可以使用少量n(如5)来计算所有值。

  for(int i=1;i<=n;i++)
  {
       s[i].vote=0;
  }

这会尝试将值s[1]初始化为s[n]。唯一的问题是s[n]不存在。数组中的最后一个值是s[n-1]。此代码将破坏堆栈上的内存,从而导致未定义的行为。

a数组也会出现同样的错误。

答案 1 :(得分:0)

vector和数组的索引值均为零,最高为n - 1。所以

for(int i = 0; i != n; ++i)

会更好。

现在你写了一个元素太远,free稍后在内存块之后的数据无效时发现。