簡體   English   中英

數組中向量的 C++ 代碼塊問題

[英]C++ CodeBlock Issue With Vector In Array

我無法使用 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;
}

cppreference:vector operator[]所示,通過此運算符訪問不存在的元素是未定義的行為。

對於您的情況, neighbor_fields[0]意味着它訪問向量的第一個元素,該元素不存在並導致錯誤。

應該是: neighbor_fields.push_back(0);

這段代碼有兩個誤解:

  1. 當您聲明neighbor_fields時,您創建了一個容器,但您沒有在其中放入任何東西。 因此,如果您嘗試訪問容器的某個項目,您將獲得未定義的行為,如果您想讓程序更安全,您可以使用std::vector::at ,它的工作方式類似於std::vector::operator[]但是當索引超出范圍時拋出異常,以便您可以處理它。

  2. std::vector::operator[]返回對容器存儲類型變量的引用,在我們的例子中是int ,您不能在 int 變量上使用push_back() ,但可以使用它在容器中添加項目。 您正在尋找的代碼是

    std::vector 鄰居域;

    int main() {

     neighbor_fields.push_back(0); return 0;

    }

此代碼創建一個容器並添加值 0。您可以假設 std::vector 類似於 c 的 arrays 所以int array[10] ,但可以更改大小添加和擦除項目。

很抱歉代碼,但我無法將其標記為我們的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM