我正在尝试使用经典模式:
for (void *cur = vec_first(v); cur != NULL; cur = vec_next(v, cur))
下一步使用以下功能:
void *vec_next(const Vector *v, const void *prev)
{
void *next = (char*) prev + v->elemsz;
return next;
}
当cur为NULL时,我想象向量应该停止迭代。然而,它一直迭代到分段错误,我不知道为什么?这段代码有什么问题,为什么不终止?
答案 0 :(得分:2)
当你到达数组的末尾并添加v-> elemsz时,结果不是NULL。这是垃圾。
答案 1 :(得分:0)
确保您的Vector
实施其操作,以使其最后一个元素具有NULL
值。如果没有完整填充,则会占用一些损坏的内存。也许考虑保留添加元素的数量。