我的计划有什么问题? 它在我的电脑上工作正常但在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
答案 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
稍后在内存块之后的数据无效时发现。