繁体   English   中英

如何创建大小为40,000的C ++ bool 2D数组?

[英]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.

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