From 5a2294f3414bb776a92c82320b89cdc79a81dc21 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 8 Sep 2005 15:07:33 +0000 Subject: [PATCH] Fix a memory allocation error: allocate (n+1)*size, not n*(size+1). (Richard B mailed me this fix in June and I never got round to committing it. Oops.) git-svn-id: svn://svn.tartarus.org/sgt/library@6280 cda61777-01e9-0310-a592-d414129be87e --- bheap.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bheap.c b/bheap.c index cf9bb5c..fe32b94 100644 --- a/bheap.c +++ b/bheap.c @@ -94,7 +94,7 @@ bheap *bheap_new(int maxelts, int eltsize, int direction, * Allocate one extra element of space, to use for swapping * things. */ - bh->elts = malloc(maxelts * (eltsize+1)); + bh->elts = malloc((maxelts + 1) * eltsize); if (!bh->elts) return NULL; @@ -364,6 +364,15 @@ int main(void) { coverage = checked_coverage = 0; + /* Regression test - this used to report access violations when run under + * valgrind. */ + bh = bheap_new(2, sizeof(int), +1, intcmp, &intcmp_ctx); + add(2); + add(1); + rem(1); + rem(2); + bheap_free(bh); + bh = bheap_new(MAX, sizeof(int), +1, intcmp, &intcmp_ctx); /* -- 2.11.0