【发布时间】:2022-01-10 19:27:14
【问题描述】:
我试图使用指针遍历数组:
#include <iostream>
#include <iterator>
int main()
{
char name[]{ "Abhi" };
for (char* ptr_c{ name }; ptr_c != (ptr_c + std::size(name)); ++ptr_c) {
std::cout << *ptr_c;
}
std::cout << "\n";
}
这会导致:Error: Segmentation fault core dumped
但是,在for 循环的条件测试中:
for (char* ptr_c{ name }; ptr_c != (ptr_c + std::size(name)); ++ptr_c)
^^^^^^
将ptr_c 替换为name 使其工作。为什么?
name不应该衰减到ptr_c吗?
【问题讨论】:
-
ptr_c != (ptr_c + std::size(name))将始终为真,如果std::size(name)不为零。因此,您的循环是无限的,并且由于每次迭代都访问*ptr_c,然后递增ptr_c,因此您的代码正在访问name末尾之后的数据。而name + std::size(name)对于每个循环迭代都是相同的 - 最终ptr_c将等于它。
标签: c++ arrays for-loop pointers segmentation-fault