Free was called with a struct as argument instead of a field from the
struct.
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index fce3599..ccf934f 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -93,7 +93,7 @@
 	    for ( key=gdbm_firstkey(dp->di_dbm); key.dptr;
 				   key = gdbm_nextkey(dp->di_dbm,okey)) {
 		 size++;
-    	    	 if(okey.dsize) free(okey);
+    	    	 if(okey.dsize) free(okey.dptr);
     	    	 okey=key;
     	    }
 	    dp->di_size = size;
@@ -180,7 +180,7 @@
 	    if ( item == 0 )
 	      return NULL;
 	    addlistitem(v, item);
-    	    if(okey.dsize) free(okey);
+    	    if(okey.dsize) free(okey.dptr);
     	    okey=key;
 	}
 	return v;