Fix a memory allocation error: allocate (n+1)*size, not n*(size+1).
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 8 Sep 2005 15:07:33 +0000 (15:07 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 8 Sep 2005 15:07:33 +0000 (15:07 +0000)
(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

diff --git a/bheap.c b/bheap.c
index cf9bb5c..fe32b94 100644 (file)
--- 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);
 
     /*