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