static void clear_rows(View* view, size_t startidx) {
if (view->rows) {
- for (size_t i = startidx; i < view->nrows; i++)
+ /* Free and clear invalid rows now */
+ for (size_t i = startidx; i < view->nrows; i++) {
free(view->rows[i]);
- view->rows = realloc(view->rows, startidx);
+ view->rows[i] = NULL;
+ }
+ /* grow row array if needed */
+ if (startidx > view->nrows)
+ view->rows = realloc(view->rows, startidx);
+ /* zero out newly created slots */
+ for (size_t i = view->nrows; i < startidx; i++)
+ view->rows[i] = NULL;
view->nrows = startidx;
}
}