繁体   English   中英

c ++向量分配错误分割错误

[英]c++ vector allocation error segmentation fault

我试图使用这样声明的向量矩阵:

vector<vector<Neurone*>* > Neurones;

顺便说一句,我已经创建了神经元类。

这是代码:

NeuralNetwork::NeuralNetwork(vector<int> NeuroneNumbers, vector<vector<vector<double>* >* > lw)
    {

        for (int i = 0; i < NeuroneNumbers.size(); i++)
        {
            if (i == 0)
            {
                Neurones.push_back(new vector<Neurone*>());
                for (int j = 0; j < NeuroneNumbers[i]; j++)
                {
                    Neurones[i]->push_back(new Neurone(new Neurone[0], new double[0]));
                    if (j == NeuroneNumbers[i] - 1)
                    {  
                        (*Neurones[i])[j]->Value = 1;//Here is the error ! with i=0 j=0 segmentation fault !

                    }
                }
            }}

std::vector矩阵实际上是std::vectorstd::vector

这是一个例子:

#include <iostream>
#include <vector>

int main() {
  // this is actually a 2D "array"
  std::vector< std::vector<int> > v;
  int N = 5; // rows
  int M = 5; // columns
  v.resize(N); // create N rows
  for(int i = 0 ; i < N ; ++i)
    for(int j = 0 ; j < M ; ++j)
      v[i].push_back(j); // fill the matrix

  //print
  for(int i = 0 ; i < N ; ++i)
    for(int j = 0 ; j < M ; ++j)
      std::cout << v[i][j] << "\n";

  return 0;
}

[编辑]

我相信,您确实需要出于目的使用pointers

 Neurones[i]->push_back(new Neurone(new Neurone[0], new double[0]));

你为什么做这个? new Neurone[0]是什么意思? 如果要通过此语句创建Neurone ,则实际上是将一个Neurone对象传递给另一个对象的constructor

Neurones[i])[j]将为您提供指向Neuron指针 因此,如果Neuron类具有一个名为Value公共成员变量,则可以通过以下方式进行设置

Neurones[i])[j]->Value = 1; // no need the * operator

但是,您不必要地使用了指针,并且使用容易出错。 您的代码可以大大简化:

vector<vector<Neurone*> > Neurones;

NeuralNetwork::NeuralNetwork(vector<int> NeuroneNumbers, vector<vector<vector<double>* >* > lw)
{

    for (int i = 0; i < NeuroneNumbers.size(); i++)
    {
        if (i == 0)
        {
            vector<Neurone*> neuronVector;
            for (int j = 0; j < NeuroneNumbers[i]; j++)
            {
                Neurone neuron=new Neurone(/*constructor params*/); // create a Neuron object
                if (j == NeuroneNumbers[i] - 1)
                {  
                    neuron.Value = 1;
                }
                neuronVector.push_back(neuron);
            }
            Neurones.push_back(neuronVector);
        }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM