首页 > 解决方案 > 数组中向量的 C++ 代码块问题

问题描述

我无法使用 CodeBlock 20.03 修改向量数组中的向量。这是代码的“简化”版本:

#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;

vector<int> neighbor_fields[500000];
int main()
{
    neighbor_fields[0].push_back(0);

    return 0;
}

程序运行良好,但程序完成后显示错误"Terminated with status -1073741510"。我做了一些研究,这个脚本在 C++ 中似乎是完全合法的。

我认为这是与 CodeBlock/compiler(gcn gcc) 相关的问题,因为它在其他地方编译得很好。

谢谢。

编辑: 我已经更正了代码(它应该是向量数组而不是单个向量)。另一个有趣的事情是对单个向量执行 push_back 也会以该错误代码终止:

#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;

vector<int> neighbor_fields;
int main()
{
    neighbor_fields.push_back(0);
    return 0;
}

标签: c++codeblocks

解决方案


这段代码有两个误解:

  1. 当你声明neighbor_fields你创建了一个容器但你没有在里面放任何东西。因此,如果您尝试访问容器的某个项目,您将得到一个未定义的行为,如果您想让程序更安全,您可以使用std::vector::at它,它的工作原理就像std::vector::operator[]但是当索引超出范围时抛出一个异常以便您可以处理它。

  2. std::vector::operator[]返回对容器存储的类型变量的引用,在我们的例子int中,您不能push_back()在 int 变量上使用,但可以使用它在容器中添加项目。您正在寻找的代码是

    std::vector 邻居域;

    int main() {

      neighbor_fields.push_back(0); 
    
      return 0;
    

    }

此代码创建一个容器并添加值 0。您可以假设 std::vector 就像类似 c 的数组 so int array[10],但可以更改大小添加和擦除项目。

很抱歉代码,但我无法将其标记为我们的代码


推荐阅读