分段错误推回在其类函数c ++的循环内创建的对象

Posted

技术标签:

【中文标题】分段错误推回在其类函数c ++的循环内创建的对象【英文标题】:segmentation fault pushback an object created inside loop of its class function c++ 【发布时间】:2017-10-22 18:51:41 【问题描述】:

我正在尝试在 for 循环中创建并插入向量,但我遇到分段错误我知道为什么并且我知道原因但我要问的是如何防止它, 我收到错误,因为范围创建的对象结束了......

void Board::Resize()

    for(int i=0; i<Row_Size; i++)
    
        for(int j=0; j<Column_Size; j++)
        
            Cell copyCell(i,static_cast<char>('a'+j),'.');

            BoardCells[i].push_back(copyCell);
        
    

Board 类有一个私有的 Cells 向量

vector<vector Cell> myCells;

和 Cell 类有私有

int row;
char column;
char status;

它是一个简单的类,变量不多

如果我不能像这样使用推回,我该怎么办? (在没有分割错误的情况下填充向量内的对象)

【问题讨论】:

在哪里调整外部向量的大小 - BoardCells?您正在访问BoardCells[i],就好像它已经存在一样,但没有显示将其添加到向量中的代码。 【参考方案1】:

在致电Resize() 之前,您是否清除了myCells?您可能希望为 i 的每个值添加一个新行(通过 push_back()),然后向其中添加新单元格。

【讨论】:

BoardCells.clear();是的,我实际上在 Resize 函数中清除了 BoardCells 所以BoardCells[i] 肯定是越界了。首先,您需要在循环内部循环之前将其添加到外部循环中,以便您拥有要填充的行。如果这样做,您可以在内部循环中使用 BoardCells.back() 来引用第 i 行。 :) 是的!这绝对是我试图进入没有向量的向量内部的问题,所以我尝试了这个,但也有错误,我的语法不太好,对吗? BoardCells[i].reserve(sizeof(int)*Row_Size); 没有。首先,在外部循环中添加一行BoardCells.push_back(vector&lt;Cell&gt;()),在内部循环之前。然后您可以将单元格添加到新创建的行中。 非常感谢!我虽然我不得不预订

以上是关于分段错误推回在其类函数c ++的循环内创建的对象的主要内容,如果未能解决你的问题,请参考以下文章

异步完成创建的 Java 对象 - 对象在构造函数完成后的一段时间内准备就绪

双向链表插入分段错误 - C

在 C 中创建大型数组时出现分段错误

JS创建对象的几种方式

C在函数中传递二维数组会给我分段错误

c ++分段错误将指针传递给函数