内存分配错误C ++的向量

时间:2010-10-13 01:31:59

标签: c++ vector memory-management copy-constructor matrix-multiplication

我在以下代码中收到std_bad_alloc错误。似乎问题是当我将矩阵添加到向量时,程序在调试器中到达该行时崩溃。问题是只从文件中读取前两个矩阵,另外两个不是因为程序因上述错误而崩溃。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

不是崩溃问题的答案(无论如何已经处理过了),但应该注意的是,你的赋值运算符正如当前所写的那样不必要地浪费:

matrix matrix::operator =(const matrix right)

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

第二个问题是这将返回matrix。这也可能导致创建不必要的临时副本。即使编译器可能能够优化掉副本,也没有任何目的让返回成为副值副本。赋值运算符的标准形式返回对分配给的对象的引用。因此,您应该继续将返回类型设为matrix&