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