簡體   English   中英

在C ++中初始化矩陣時出現分段錯誤(內核已轉儲)

[英]Segmentation fault (core dumped) when initializing a matrix in c++

執行實例化類Matrice的程序並在其構造函數中創建該程序時,出現Segmentation fault (core dumped)錯誤。

這是我的簡單代碼:

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>

class Matrice{
public:
  std::vector<std::vector<int> > mat;

  Matrice(){
    for(int i=0; i < 3; ++i) {
      for(int j=0; j < 2; ++j) {
        mat[i][j] = rand()%(10-0)+0;
      }
    }
  }
};


int main(){
  Matrice mat1;
  return 0;
}

有人可以啟發我。

您需要在訪問元素之前調整矩陣大小:

mat.resize(3);
for( int i=0; i < 3; ++i)
{
  mat[i].resize(2);
}
Matrice(){
    for(int i=0; i < 3; ++i) {
        mat.push_back(std::vector<int>());
        for(int j=0; j < 2; ++j) {
            mat[i].push_back(rand()%(10-0)+0);
        }
    }
}

編輯:

說明:向量需要push_back函數調用才能在向量的末尾添加一個元素,並且如果向量超過了最初為向量分配的大小,則會自動為向量重新分配空間。 由於它是向量的向量,因此您首先需要推回任意向量,然后在存儲在mat [i]中的每個任意向量上,我們push_back所需的隨機整數值。

您使用的std::vector錯誤。 請參閱https://en.cppreference.com/w/cpp/container/vector/operator_at

[]運算符返回對現有值的引用。 std::map不同,它不會插入新值。 使用std::vector::push_back()將元素添加到向量中。

暫無
暫無

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

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