--- src/bytecode.c.orig	2019-05-21 05:31:32 +0000
+++ src/bytecode.c	2019-05-21 05:32:26 +0000
@@ -56,7 +56,8 @@
 }
 
 static void symbol_table_free(struct symbol_table* syms) {
-  jv_mem_free(syms->cfunctions);
+  if (syms->cfunctions)
+    jv_mem_free(syms->cfunctions);
   jv_free(syms->cfunc_names);
   jv_mem_free(syms);
 }
--- src/bytecode.h.orig	2019-05-21 05:32:37 +0000
+++ src/bytecode.h	2019-05-21 05:33:49 +0000
@@ -55,6 +55,7 @@
 struct symbol_table {
   struct cfunction* cfunctions;
   int ncfunctions;
+  int lencfunctions;
   jv cfunc_names;
 };
 
--- src/compile.c.orig	2019-05-21 05:33:58 +0000
+++ src/compile.c	2019-05-21 05:36:03 +0000
@@ -1257,6 +1257,7 @@
       int idx = bc->globals->ncfunctions++;
       bc->globals->cfunc_names = jv_array_append(bc->globals->cfunc_names,
                                                  jv_string(curr->symbol));
+      assert(idx <= bc->globals->lencfunctions);
       bc->globals->cfunctions[idx] = *curr->imm.cfunc;
       curr->imm.intval = idx;
     }
@@ -1359,8 +1360,13 @@
   bc->nclosures = 0;
   bc->globals = jv_mem_alloc(sizeof(struct symbol_table));
   int ncfunc = count_cfunctions(b);
+  bc->globals->lencfunctions = ncfunc;
   bc->globals->ncfunctions = 0;
-  bc->globals->cfunctions = jv_mem_calloc(sizeof(struct cfunction), ncfunc);
+  if (ncfunc > 0) {
+    bc->globals->cfunctions = jv_mem_calloc(sizeof(struct cfunction), ncfunc);
+  } else {
+    bc->globals->cfunctions = NULL;
+  }
   bc->globals->cfunc_names = jv_array();
   bc->debuginfo = jv_object_set(jv_object(), jv_string("name"), jv_null());
   jv env = jv_invalid();
 
