我有一个班级,Matrix
class Matrix
{
private:
int cols;
int rows;
int **matrix;
public:
//constructors and methods
friend Matrix addandupdate(Matrix a, Matrix b);
}
我在外面定义了addandupdate函数,如下所示,
Matrix addandupdate(Matrix a, Matrix b)
{
int rsize = a.rows;
int csize = a.cols;
Matrix c(csize, rsize);
for(int i=0; i<rsize; i++)
{
for(int j=0; j<csize; j++)
{
c.set(i,j,a.matrix[i][j]+b.matrix[i][j]);
}
}
return c;
}
然后在main中,
Matrix x(c, r);
//filling values in x
//printing x
Matrix newx = addandupdate(x, x); //something is not right here
//printing newx
一切都很好,除了导致抛出运行时错误的上一行。
*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x085c6020 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x73e42)[0x183e42]
/lib/i386-linux-gnu/libc.so.6(+0x74525)[0x184525]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0x84d51f]
./a.out[0x8048c69]
./a.out[0x8048b05]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x1294d3]
./a.out[0x8048751]
我很长一段时间都在编写C ++代码。如果这是愚蠢的话,请原谅。
答案 0 :(得分:1)
Matrix newx = addandupdate(x, x);
调用您尚未实现的复制构造函数,而需要,因为在您的情况下,浅拷贝是不够的。
您还需要一个赋值运算符和析构函数。
或者,正如Mark指出的那样,将int **matrix;
替换为std::vector<std::vector<int> >
。