我在下面的代码中得到std_bad_alloc错误。看起来问题是当我将矩阵添加到向量中时,程序在调试器中到达该行时崩溃。问题是只有前两个矩阵从文件中读取,另外两个并不是因为程序崩溃而出现上述错误。错误的内存分配C++为一个向量
0
A
回答
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
相关问题
- 1. 为一个向量分配内存
- 2. 向量C++内存分配
- 3. C内存分配错误
- 4. 内存分配“错误:无法分配大小为75.1 Mb的向量”
- 5. 为MPI分配一个C++向量对
- 6. 在C++中为分配内存错误分配异常*
- 7. 当声明向量时神秘的malloc内存分配错误
- 8. 内存分配运行时错误C
- 9. 段错误,分配内存以指向矢量
- 10. 错误由两个向量分配?
- 11. C++向量分段错误
- 12. 内存分配码错误
- 13. CUBLAS内存分配错误
- 14. lodePNG内存分配错误
- 15. 内存泄漏与分配的结构包含一个向量
- 16. C++矢量分配错误
- 17. 与向量的push_back内存分配
- 18. 内存分配中的分段错误
- 19. C++分配内存一类
- 20. 常量迭代器的向量构造函数内存分配,seg错误
- 21. C++内存分割错误?
- 22. 分配内存到一个对象c#
- 23. 分配大量内存会导致错误?为什么?
- 24. 分配向量,它的内存类型是自己的类C++
- 25. 向量分配和内存使用
- 26. 分段错误11,尽管大量的内存分配
- 27. std :: find()为一个向量的错误
- 28. 动态内存分配在C++中的向量
- 29. C++向量的内存分配<bool>
- 30. 分配本地C++向量的内存在哪里?
尝试尽可能删除发布的代码,同时保持代码崩溃的方式完全相同,可能需要几分钟,但它会使那些可能会帮助你更快乐的人。很难得到那么多代码的任何形式的概述。 – dutt 2010-10-13 01:38:49
当然,我只是消除了很多代码。我的程序在将第二个矩阵添加到矢量后立即崩溃 – user69514 2010-10-13 01:39:22
我们仍然不知道“矩阵”是什么。 – GManNickG 2010-10-13 01:46:35