Fix a memory allocation error: allocate (n+1)*size, not n*(size+1).
[sgt/library] / 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);
 
     /*