构造函数问题 - 初始化列表 (c++)
这是我遇到的一个奇怪的问题 我有一个非常简单的构造函数,它创建一个没有值的矩阵:
RegMatrix::RegMatrix(const int numRow, const int numCol):
_numRow(numRow),_numCol(numCol),_matrix()
{
}
_matrix 是一个包含“Comlex”的向量,它是我创建的一个对象
,VAL(i,j) 是 #define VAL(i,j) ( (i * _numCol) + j)
现在,我在函数 transpose 中调用此构造函数:
RegMatrix RegMatrix::transpose()
{
RegMatrix newMatrix(_numCol,_numRow);
cout << "DIMENSIONS " << newMatrix._numRow << " " << newMatrix._numCol << endl;
for(int j=0; j<_numCol; j++)
{
for(int i=0; i<_numRow; i++)
{
newMatrix._matrix[VAL(i,j)] = _matrix[VAL(j,i)]; //<--SEGMENTATION FAULT
}
}
return newMatrix;
}
这是我的问题:第一次进入第二个循环时出现分段错误。当我使用 eclipse 调试器时,我看到 newMatrix 的 _nunRow 和 _numCol 值似乎是垃圾(一个是“0”,另一个是 -10000000 或类似的值)。更奇怪的是,我添加输出行只是为了确定,它给了我正确的数字! 那么,关于我的问题有什么想法吗? 谢谢!
it's a weird problem that I have
I have a very simple constructor that's creates a matrix with no values:
RegMatrix::RegMatrix(const int numRow, const int numCol):
_numRow(numRow),_numCol(numCol),_matrix()
{
}
_matrix is a vector that holds 'Comlex', an object I've created
and VAL(i,j) is #define VAL(i,j) ((i * _numCol) + j)
Now, I call this constructor in function transpose:
RegMatrix RegMatrix::transpose()
{
RegMatrix newMatrix(_numCol,_numRow);
cout << "DIMENSIONS " << newMatrix._numRow << " " << newMatrix._numCol << endl;
for(int j=0; j<_numCol; j++)
{
for(int i=0; i<_numRow; i++)
{
newMatrix._matrix[VAL(i,j)] = _matrix[VAL(j,i)]; //<--SEGMENTATION FAULT
}
}
return newMatrix;
}
And here's my problem: I get a segmentation fault the very first time I enter the second loop. When I use the eclipse debugger I see that _nunRow and _numCol values of newMatrix seem to be garbage (one is '0' the other is -10000000 or something like that). What's even more weird is that I added the output line just to be sure and it gave me the right numbers!
So, any ideas as to what can be my problem?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您正在索引一个空向量,这注定会失败。使用
at
而不是下标运算符,您将得到一个异常。You are indexing into an empty vector, which is doomed to fail. Use
at
instead of the subscript operator and you will get an exception.我的猜测(根据您所展示的内容)是,您实现复制构造函数的方式可能存在一些问题。
My guess (based on what you show) is that there may be some problems with how you implement the copy constructor.