矢量迭代永远在C中

时间:2014-07-14 15:12:53

标签: c

我正在尝试使用经典模式:

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时,我想象向量应该停止迭代。然而,它一直迭代到分段错误,我不知道为什么?这段代码有什么问题,为什么不终止?

2 个答案:

答案 0 :(得分:2)

当你到达数组的末尾并添加v-> elemsz时,结果不是NULL。这是垃圾。

答案 1 :(得分:0)

确保您的Vector实施其操作,以使其最后一个元素具有NULL值。如果没有完整填充,则会占用一些损坏的内存。也许考虑保留添加元素的数量。