奇怪的向量<long>加上'0'为'-1'

use*_*893 0 c++ debugging error-handling

我正在写一个基本的国际象棋程序来计算你可以用给定的国际象棋数字制作多少套.数据文件:

4
22 3 5 6 2 0
1 1 1 1 1 1
8 4 4 4 1 2
5 3 3 3 0 2
Run Code Online (Sandbox Code Playgroud)

代码:

#include <iostream>
#include <fstream>
#include <vector>

int main
(int argc, char *argv[])
{
    std::fstream data_file;
    size_t i, k;
    std::vector<long> chess;
    long t, n;

    data_file.open("U1.txt", std::ios::in);

    data_file >> n;

    for (i = 0; i < n; i++)
        chess.push_back(0);

    for (i = 0; i < n; i++) {
        for (k = 0; k < 6; k++) {
            data_file >> t;
            std::cout << t << " ";
            chess[k] += t;
        }
        std::cout << std::endl;
    }

    data_file.close();

    for (int i = 0; i < 6; i++)
        std::cout << chess[i] << " ";
    std::cout << std::endl;

    data_file.open("U1rez.txt", std::ios::out);
    data_file << n;
    std::cout << n << std::endl;
    data_file.close();

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

输出:

22 3 5 6 2 0 
1 1 1 1 1 1 
8 4 4 4 1 2 
5 3 3 3 0 2 
36 11 13 14 3 4 
4
Run Code Online (Sandbox Code Playgroud)

为什么我在第5行36,11,13和14之后的最终结果得到3分4分?当我打印测试值时,我似乎得到了正确的数字,但是在向量容器中添加它们时出现了严重错误.

nim*_*ims 5

for (i = 0; i < n; i++)
    chess.push_back(0);
Run Code Online (Sandbox Code Playgroud)

...

    for (i = 0; i < n; i++) {
    for (k = 0; k < 6; k++) {
        data_file >> t;
        std::cout << t << " ";
        chess[k] += t;
    }
    std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在这里,你初始化了向量中的n(= 4)个位置,但是在这里你正在访问向量象棋的索引4和5,这导致了加法问题.