【发布时间】:2017-01-10 05:09:19
【问题描述】:
给定以下代码:
vector<int> A[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 万个整数,而其余的保持为空。
我必须调用析构函数吗?我假设不是,因为我从未调用过 new,但我是 STL 的新手。最后,这可能不是我的代码问题,而是测试人员,但仍然希望确保这对我来说没问题。
【问题讨论】:
-
这段代码没问题,其他地方可能有错误。或者堆栈溢出
-
你试过了吗,
vector<int> A(1000000,0);?这将用零填充向量。 -
@tinstaafl 是单个向量,OP 代码生成一百万个向量(我认为这是故意的)
-
在编译器中检查 sizeof(int),如果是 2 字节,那么 for 循环就是罪魁祸首。
-
@MM 是的。它是 100 万个向量(它们之间将容纳 100 万个整数,所以这不应该是内存不足的原因),而不是一个 100 万个元素向量。我猜它是测试代码然后......
标签: c++ arrays vector stl initialization