给出以下代码:
vectorA[1000000]; for( int i = 0; i < 1000000; i++ ){ A[i].clear(); }
我在一个自动终端上运行它,它有我的代码运行的测试用例,所以我无法获得完整的调试消息.我没有得到任何错误,程序似乎运行良好的单个测试用例.然而,当我对整个集合运行时,我随机传递/失败测试用例(有一次我可以通过前3个,另一个我传递除了它们之外的所有东西,另一个我只传递第二个,等等).我想确保这种初始化将摆脱数组上的"未定义"值(例如char *buffer = new char[100]; buffer[0] = 0;
),这样它就不会导致随机崩溃.
sizeof(A) == 24000000
(〜23MB), sizeof(int) == 4
.我只向这些向量添加了100万个整数(总计),因此在最差的测试中,每个向量可以是一个元素向量,或者单个向量可以有100万个整数,而其余的仍然是空的.
我必须打电话给析构函数吗?我没想到因为我从未打电话给新人,但我是STL的新手.最后,我的代码可能不是问题,而是测试人员,但仍然要确保这对我来说很好.
我认为这是一个堆栈溢出,正如MM建议的那样.这条线
std::vectorA[1000000];
在堆栈上创建了一百万个矢量对象,这太过分了.在我的机器上,示例失败了一百万个向量,但它工作正常一千.