我一直在研究我的单词搜索算法。它工作得很好,但后来我决定测试一个非常大的拼图,如10000 x 10000,它是一个充满符号的矩阵。所以创建了一个小程序来制作这个难题。然后我运行word搜索它与bad_alloc崩溃。 我使用2D数组。 代码:
string ** Matrix = new string*[Height];
for(int i = 0; i < Height; ++i)
{
Matrix[i] = new string[Widht];
}
高度= Widht = 10000;
我不知道为什么会这样。我已经读过新的并没有真正的限制所以为什么它会崩溃?
顺便说一句,为了好玩,我打开了Windows任务管理器,程序试图分配内存,内存最多2m +然后崩溃。
答案 0 :(得分:6)
对于Debug构建中的类对象,std :: string类是28个字节。不计算实际字符串所需的任何存储空间。因此,您的程序分配10000 x 10000 x 28 = 2.8千兆字节。 Windows中的32位进程无法分配超过2千兆字节,无论是给予还是已经超过该限制。
您需要编写更智能的代码或切换到64位代码生成。获得成功的一个明显方法是认识到单词搜索程序每个单元只需要一个字符,而不是整个字符串。因此char
就足够了。或者将整行网格存储到单个std :: string中。将您的内存需求降低两个数量级。