【发布时间】:2013-12-12 14:20:53
【问题描述】:
所以我有这个复杂的类,我想要一个二维复数数组,这是代码的一部分,而不是所有代码
class Complex {
public:
/* construction/destruction */
Complex(double r, double i) { this->r = r; this->i = i; }
Complex() { r=0.0; i=0.0; }
~Complex() { r=0.0; i=0.0; }
/* operations */
Complex operator+(Complex &c) { return Complex( r+c.r, i+c.i ); }
double r, i;
};
int main()
{
const int HEIGHT = 256;
const int WIDTH = 256;
Complex G[HEIGHT][WIDTH];
}
所以线复杂 G[HEIGHT][WIDTH];是导致问题的线路,知道为什么吗?
【问题讨论】:
-
假设一个 8 字节双精度,这对于
G单独来说就是 1MB 的堆栈存储空间,这通常是总体限制。 -
因为您的堆栈溢出了 65536 个
Complex对象。这真的不是一个……复杂的……要理解的东西。 -
最好不要在堆栈上分配大数组 - 使用
malloc- 并且可能创建一个访问函数作为类的一部分以保持索引简单。 -
@Floris, s/
malloc/vector/. -
尝试静态。这将其放入静态数据区域并避免浪费宝贵的堆栈......与 malloc 不同,编译器在编译时仍然知道它在哪里 :)
标签: c++ class visual-c++ pointers