繁体   English   中英

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

[英]Bad memory allocation C++ for a vector

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

在副本构造函数的任何地方都没有设置numCols,numRows。

并不是崩溃问题的答案(无论如何已经解决了),但是应该注意,您的赋值运算符按照当前的编写是不必要的浪费:

matrix matrix::operator =(const matrix right)

第一个问题是它正在按值获取参数。 当然,这意味着当发生类似A = B的赋值时,将生成B的副本并在函数的right参数处使用。 但是在当前代码中,复制的唯一目的是设置A的值,然后将其销毁。 您也可以传递const matrix&来避免复制。 (或者,您可以将参数保留为按值复制,但将整个运算符实现为“ 复制和交换” 。)

第二个问题是,这将返回一个matrix 这也可能导致创建不必要的临时副本。 即使编译器可以优化副本,也根本没有返回值副本的目的。 赋值运算符的标准形式返回对分配给该对象的引用。 因此,您应该继续进行操作,然后将返回值键入matrix&

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM