[英]How to create a C++ bool 2D array with size 40,000?
我想创建一个名为connectionsOf
的布尔矩阵,其大小最大为40000。这是我的代码:
int index = 40000;
bool connectionsOf[index][index];
但是,当我在具有37000个数字的文件上运行它以填充矩阵时,存在分段错误。 浏览stackoverflow时,我发现这是因为索引号太高而导致堆栈崩溃。 有没有办法使该堆栈成为可能? 例如静态,常量,动态,指针? 如果是这样,我应该用什么替换我的代码?
您可以通过在boost :: dynamic_bitset周围编写包装器来模拟二维位数组(并可能节省一点内存)。
class BitMatrix
{
public:
BitMatrix (int size) : size_(size), bits_(size_ * size_) {}
void set(int x, int y) { bits_.set(y * size_ + x); }
bool test(int x, int y) { return bits_.test(y * size_ + x); }
private:
int size_;
boost::dynamic_bitset bits_;
};
如果您在编译时知道大小,则也可以将此技术与std::bitset
。
对问题的答案取决于您使用的编译器。 对于gcc,请参阅此问题 。 但是,为什么需要在堆栈而不是堆上分配这么大的数据块? 而且,顺便说一句,您需要分配200 x 200数组才能获得4万个项目(200 ^ 2)。
您正在滥用堆栈。 40'000 x 40'000 x sizeof(bool)=(至少)800'000'000。 足够多(单个块中有800MB)
尝试:
index = 40000;
bool** connections = new bool*[index];
for (int t = 0; t < index; ++t) {
connections[t] = new bool[index];
}
确保也适当地处置它(与上述相同,只是相反-首先迭代并处置数组元素,然后处置表本身)
您应该能够通过编译器标志设置堆栈大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.