diff --git a/gc.c b/gc.c index 4d92ede42a..c42d907df5 100644 --- a/gc.c +++ b/gc.c @@ -7570,14 +7570,18 @@ typedef int page_compare_func_t(const void *, const void *, void *); static struct heap_page ** allocate_page_list(rb_objspace_t *objspace, page_compare_func_t *comparator) { - size_t n = heap_eden->total_pages; - struct heap_page *page, **page_list = calloc(n, sizeof(struct heap_page *)); + size_t total_pages = heap_eden->total_pages; + struct heap_page *page, **page_list = malloc(total_pages * sizeof(struct heap_page *)); int i = 0; list_for_each(&heap_eden->pages, page, page_node) { page_list[i++] = page; + GC_ASSERT(page != NULL); } - ruby_qsort(page_list, n, sizeof(struct heap_page *), comparator, NULL); + GC_ASSERT(total_pages > 0); + GC_ASSERT((size_t)i == total_pages); + + ruby_qsort(page_list, total_pages, sizeof(struct heap_page *), comparator, NULL); return page_list; }