【发布时间】:2013-10-31 14:27:12
【问题描述】:
我浪费了大量时间,因为我忘记初始化迭代器然后尝试访问它们应该指向的数据。出现此类错误的唯一标记是运行时的分段错误。这是一个例子:
vector<Foo> V;
//Uninitialized pointer:
vector<Foo>::iterator it;
//....loads of code later, attempt to access pointer that points to nothing
(*it);
//Segmentation fault!
是否有一种标准技术可以在编译时自动进行这种检查?
【问题讨论】:
-
实用解决方案:将迭代器定义移到 "... loading of code" 位之后。
-
使用惯用代码?
for (auto it = v.begin(); ...) -
如何将“代码量”减少到“一点点代码”?
-
尽可能晚地声明迭代器,并在声明时对其进行初始化。
-
我很乐意,但迭代器包含在包装器中。我正在尝试将实现
vector<Foo>从通用算法中抽象出来,因此我使用包装器的成员函数来控制迭代器。
标签: c++ iterator initialization segmentation-fault