我已经为矩阵对象构建了一个构造函数。数据存储在struct val
的数组中,该数组又保存位置(在矩阵中)和值。这是代码:构造函数中的不清楚的段错误
SparseMatrix::SparseMatrix(const int numRow, const int numCol, vector<double> fill):
Matrix(numRow,numCol)
{
_matrix = new vector<val*>(fill.size());
vector<double>::iterator itr = fill.begin();
for(signed int i=0; i<numRow; i++)
{
for(signed int j=0; j<numCol; j++, itr++)
{
if (*itr == 0)
{
continue;
}
val *temp = new val;
temp->value = *itr;
temp->x = i;
temp->y = j;
_matrix->push_back(temp);
cout << "Psition: " << ": " << _matrix->front()->x << //<--ERROR
cout << " " << _matrix->back()->y << endl;
}
}
}
你会发现,我已经添加COUT只是验证的push_back并没有真正为我工作。 _matrix堆积如山,其中所有结构也在堆叠中。所有使用'新'创建。我不明白为什么这不起作用。在我将一个新的结构指针推向向量之后,我无法读取它(分段错误,如我所说)。
任何想法?谢谢!
编辑: 对不起,这是Valgrind的的消息:
==13334== Invalid read of size 4
==13334== at 0x804AEAE: SparseMatrix::SparseMatrix(int, int, std::vector<double, std::allocator<double> >) (in /home/yotamoo/workspace/ex3/main)
==13334== by 0x8048C10: main (in /home/yotamoo/workspace/ex3/main)
==13334== Address 0x8 is not stack'd, malloc'd or (recently) free'd
==13334==
==13334==
==13334== Process terminating with default action of signal 11 (SIGSEGV)
==13334== Access not within mapped region at address 0x8
==13334== at 0x804AEAE: SparseMatrix::SparseMatrix(int, int, std::vector<double, std::allocator<double> >) (in /home/yotamoo/workspace/ex3/main)
==13334== by 0x8048C10: main (in /home/yotamoo/workspace/ex3/main)
==13334== If you believe this happened as a result of a stack
==13334== overflow in your program's main thread (unlikely but
==13334== possible), you can try to increase the size of the
==13334== main thread stack using the --main-stacksize= flag.
==13334== The main thread stack size used in this run was 8388608.
而且 - 在第一次迭代过程中发生分段错误!
什么GDB告诉你吗? Valgrind的?你为什么要存储指针? –