0

我在下面的代码中得到std_bad_alloc错误。看起来问题是当我将矩阵添加到向量中时,程序在调试器中到达该行时崩溃。问题是只有前两个矩阵从文件中读取,另外两个并不是因为程序崩溃而出现上述错误。错误的内存分配C++为一个向量

+0

尝试尽可能删除发布的代码,同时保持代码崩溃的方式完全相同,可能需要几分钟,但它会使那些可能会帮助你更快乐的人。很难得到那么多代码的任何形式的概述。 – dutt 2010-10-13 01:38:49

+0

当然,我只是消除了很多代码。我的程序在将第二个矩阵添加到矢量后立即崩溃 – user69514 2010-10-13 01:39:22

+1

我们仍然不知道“矩阵”是什么。 – GManNickG 2010-10-13 01:46:35

回答

2

你的拷贝构造函数中没有设置numCols,numRows。

2

不是解决死机问题(已经采取的已经照顾反正),但应注意的是,你的赋值运算符是不必要的浪费作为当前写入:

matrix matrix::operator =(const matrix right) 

第一个问题是,它正在通过值取参数。这当然意味着当发生诸如A = B的分配时,则制作B的副本并将其用于该函数的参数right。但在目前的代码中,副本的唯一目的是设置A的值,然后将其销毁。你可以通过const matrix&来避免复制。 (或者,您可以将该参数保留为按值副本,但实现整个运算符为copy-and-swap。)

第二个问题是,这返回matrix。这也可能导致创建不必要的临时副本。即使编译器可能能够优化拷贝,但根本没有任何目的将拷贝作为按值拷贝。赋值运算符的标准形式返回对分配给的对象的引用。所以,你应该继续前进,并使返回类型为matrix&

+0

好点,虽然重新返回一个矩阵&:问题远不止是多余的副本是不必要的。 (x = y)应该返回对x的引用,以便在x上调用进一步的操作,而不是某些副本...对于变异函数至关重要。例如:(yyyy = yyyymmdd).erase(4); – 2010-10-13 04:54:45