Pra*_*dia 0 c++ error-handling vector segmentation-fault
当我在比较中使用 vector.size() 时,它给出了意想不到的结果
vector<int> v;
for(int i = 0; i < v.size() -1;++i){
printf("i = %d\n", i);
printf("v[i] = %d\n", v[i]);
}
Run Code Online (Sandbox Code Playgroud)
由于向量的大小为 0,它不应该打印任何内容,而是进入 for 循环并打印i = 0并给出分段错误。但它不应该甚至进入for循环v.size() - 1的-1。
为什么会发生?
问题是你的循环:
for(int i = 0; i < v.size() -1;++i)
Run Code Online (Sandbox Code Playgroud)
更具体地说,这部分条件:v.size() - 1。
该size函数返回一个 type 值size_type,如果您阅读例如此vector引用将看到它是一个无符号类型。
这意味着当您1从 value 中减去时0,您不会得到-1而是得到一个非常大的值,因为无符号下溢会环绕到其最高值。
这意味着您的循环确实会迭代,至少一次,并在索引越界时导致 UB(未定义行为)。
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |