C++ C+中的双自由错误/损坏+;使用全局声明的向量时

C++ C+中的双自由错误/损坏+;使用全局声明的向量时,c++,stl,global-variables,stdvector,double-free,C++,Stl,Global Variables,Stdvector,Double Free,对于此代码 #include<bits/stdc++.h> #include<iostream> #include<vector> using namespace std; vector<long long int> v1,v2; int main(int argc, char const *argv[]){ long long int t, n, i, x, day_count; scanf("%ll

对于此代码

#include<bits/stdc++.h>
#include<iostream>
#include<vector>

using namespace std;

vector<long long int> v1,v2;

    int main(int argc, char const *argv[]){
        long long int t, n, i, x, day_count;
        scanf("%llu", &t);
        while(t--){
            scanf("%llu", &n);
            for(i=0; i<n; i++){
                scanf("%llu", &x);
                v1.push_back(x);
                v2.push_back(0);
            }
            day_count = SpreadTheWord(n);
            printf("%llu\n", day_count);    
            v1.clear();
            v2.clear();
        }  
        return 0;
    }
我用另一个代码得到了答案,但我想知道为什么这个代码会出现这个错误

我不认为SpreadTheWord()有什么问题,但以防您想知道SpreadTheWord()的功能

谢谢大家!

编辑:对不起,我忘了附加输入

3
10
1 1 1 1 1 1 1 1 1 1
10
2 2 2 2 2 2 2 2 2 2
10
3 3 3 3 3 3 3 3 3 3 
问题就出在这里:

证明
v2[j]
v2[m]
始终在
v2
的范围内是非常重要的

一般来说,
SpreadTheWord
是一堆意大利面逻辑,可能会破坏堆


[x]
替换为
.at(x)
,以获取异常而不是内存损坏

声明变量,使其尽可能接近其初始化,并使其尽快脱离作用域,以减少变量悬空的长度,并减少“状态”程序的数量

给varaibles起个合理的名字

处理以下可能性:

        for(i=0; i<n; i++){
            scanf("%llu", &x);
            v1.push_back(x);
            v2.push_back(0);
        }
(i=0;i)的

证明
v2[j]
v2[m]
始终在
v2
的范围内是非常重要的

一般来说,
SpreadTheWord
是一堆意大利面逻辑,可能会破坏堆


[x]
替换为
.at(x)
,以获取异常而不是内存损坏

声明变量,使其尽可能接近其初始化,并使其尽快脱离作用域,以减少变量悬空的长度,并减少“状态”程序的数量

给varaibles起个合理的名字

处理以下可能性:

        for(i=0; i<n; i++){
            scanf("%llu", &x);
            v1.push_back(x);
            v2.push_back(0);
        }

for(i=0;i请提供输入设置初始值和不等待输入可能会更容易。我输入了“0\n”并且没有复制。如果输入
2
,您可以访问超出范围的向量:
v2[j]=1
。编译调试bui,d调试构建通常检查向量元素是否使用超出范围的索引进行访问。我现在为问题添加了一个输入。您可以查看链接(问题中提供)用于另一个输入。谢谢!请提供输入。设置初始值和不等待输入可能会更容易。我输入了“0\n”,但没有复制。如果输入
2
,您可以在此处访问超出范围的向量:
v2[j]=1
。编译调试bui,d调试构建通常检查是否使用超出范围的索引访问向量元素。我现在已为问题添加了一个输入。您可以查看链接(问题中提供)以获取其他输入。谢谢!
            while(v2[m] != 0){
                v2[m] = 2;
                m++;
            }
    if(k!=0 && v2[i] == 2){ //condition 2
        v2[j] = 1;
        k--;
        j++;
    }
        for(i=0; i<n; i++){
            scanf("%llu", &x);
            v1.push_back(x);
            v2.push_back(0);
        }