Index: src/lexical.c
===================================================================
--- src/lexical.c	(revision 8659)
+++ src/lexical.c	(working copy)
@@ -130,6 +130,7 @@
     PMC *ohash;
     HashBucket *b;
     INTVAL i;
+    char *c_name;
 
     for (i = PMC_int_val(pad) - 1; i >= 0; i--) {
         ohash = ((PMC**)PMC_data(pad))[i];
@@ -140,10 +141,15 @@
             return;
         }
     }
-
-    internal_exception(-1, "Lexical '%s' not found",
-                               (name == NULL) ? "???"
-                               : string_to_cstring(interp, name));
+    
+    if (name)
+    {
+        c_name = string_to_cstring(interp, name);
+        internal_exception(-1, "Lexical '%s' not found", c_name);
+        string_cstring_free(c_name);
+    }
+    else
+        internal_exception(-1, "Attempt to find lexical with null name string");
 }
 
 /*
Index: src/objects.c
===================================================================
--- src/objects.c	(revision 8659)
+++ src/objects.c	(working copy)
@@ -448,13 +448,15 @@
     INTVAL new_type;
     VTABLE *new_vtable, *parent_vtable;
     PMC *vtable_pmc;
+    char *c_error;
 
     /*
      * register the class in the PMCs name class_hash
      */
     if ((new_type = pmc_type(interpreter, class_name)) > enum_type_undef) {
-        internal_exception(1, "Class %s already registered!\n",
-                string_to_cstring(interpreter, class_name));
+        c_error = string_to_cstring(interpreter, class_name);
+        internal_exception(1, "Class %s already registered!\n", c_error);
+        string_cstring_free(c_error);
     }
     new_type = pmc_register(interpreter, class_name);
     /* Build a new vtable for this class
@@ -1190,6 +1192,7 @@
     PMC *attr_hash = NULL;
     PMC *attr_array;
     STRING *full_attr_name;
+    char *c_error;
 
     class_array = (SLOTTYPE *)PMC_data(class);
     class_name = VTABLE_get_string(interpreter,
@@ -1204,8 +1207,11 @@
     full_attr_name = string_concat(interpreter, full_attr_name, attr, 0);
     /* TODO escape NUL char */
     if (VTABLE_exists_keyed_str(interpreter, attr_hash, full_attr_name))
-        internal_exception(1, "Attribute '%s' already exists",
-                string_to_cstring(interpreter, full_attr_name));
+    {
+        c_error = string_to_cstring(interpreter, full_attr_name);
+        internal_exception(1, "Attribute '%s' already exists", c_error);
+        string_cstring_free(c_error);
+    }
 
     /*
      * TODO check if someone is trying to add attributes to a parent class
Index: src/dynext.c
===================================================================
--- src/dynext.c	(revision 8659)
+++ src/dynext.c	(working copy)
@@ -176,6 +176,9 @@
             err = Parrot_dlerror();
             fprintf(stderr, "Couldn't load '%s': %s\n",
                     full_name, err ? err : "unknown reason");
+            string_cstring_free(file_name);
+            string_cstring_free(full_name);
+            string_cstring_free(file_w_ext);
             return NULL;
         }
         /*
@@ -207,6 +210,8 @@
                 err = Parrot_dlerror();
                 fprintf(stderr, "Couldn't load '%s': %s\n",
                         full_name, err ? err : "unknown reason");
+                string_cstring_free(file_name);
+                string_cstring_free(file_w_ext);
                 return NULL;
             }
             /*
@@ -256,6 +261,7 @@
     err = Parrot_dlerror();
     fprintf(stderr, "Couldn't load '%s': %s\n",
             file_name, err ? err : "unknown reason");
+    string_cstring_free(file_name);
     return NULL;
 }
 
