【发布时间】:2013-09-21 23:39:20
【问题描述】:
我有一个 C++ 程序,主要执行矩阵乘法、加法等操作。
问题是,当计算执行大约 300 万次时会发生 EXC_BAD_ACCESS。
当一个问题被执行数百万次和几个小时时,是否会出现任何可能的问题?
节目详情:
该程序只是对不同范围的值进行计算,因此它同时在 6 个线程上执行。线程之间没有资源共享。
程序中似乎没有明显的问题,因为:
- 没有内存泄漏,我用 Instruments 确认过,程序内存大小稳定。
- 该程序可以在每个线程上执行至少 200 万次而没有任何问题,但几乎可以保证 EXC_BAD_ACCESS 异常在某个时间出现在某个线程上。 (异常发生在我对程序的 2 次尝试中(2/2))
关于矩阵乘法:
有时矩阵的大小约为 2*2 乘以 2*1000。
矩阵的元素是一个自定义的复数类。
元素的值由 rand() 随机生成并转换为浮点数。
结构是这样的:
class Complex
{
private:
float _real, _imag;
public:
// getters, setters and overloaded operators
};
class Matrix
{
private:
Complex **_values;
int _row,_col;
public:
getters, setters and overloaded operators
};
非常感谢!
非常欢迎任何可能的崩溃原因!
【问题讨论】:
-
EXC_BAD_ACCESS通常意味着代码中的错误或不稳定的硬件。 -
程序不会老化。如果一个程序不包含任何错误,它可以无限期地运行。调试器将帮助您找到错误。
-
如果您在几个小时内非常努力地驱动 CPU 并最终导致崩溃,但您确信您的代码是正确的,那么需要检查的一件事是确保您的计算机没有过热。 (对不起,如果这听起来很愚蠢,但你确实问了任何可能的原因......)
-
Ubuntu 不会让你的程序突然运行得更正确 :)
-
您将结果写入哪里?那里有线程覆盖的机会吗?您是否在调用任何非线程安全的运行时函数?
标签: c++ multithreading matrix stability