diff --git a/dcmdata/libsrc/mkdictbi.cc b/dcmdata/libsrc/mkdictbi.cc
index 5bfaf5a..4410d03 100644
--- a/dcmdata/libsrc/mkdictbi.cc
+++ b/dcmdata/libsrc/mkdictbi.cc
@@ -357,5 +357,9 @@ main(int argc, char* argv[])
     fprintf(fout, "\n");
 
     dcmDataDict.unlock();
+    if (filename && fout)
+    {
+        fclose(fout);
+    }
     return 0;
 }
diff --git a/dcmnet/libsrc/assoc.cc b/dcmnet/libsrc/assoc.cc
index 35fa754..6196465 100644
--- a/dcmnet/libsrc/assoc.cc
+++ b/dcmnet/libsrc/assoc.cc
@@ -668,7 +668,11 @@ ASC_addPresentationContext(
     pc = (DUL_PRESENTATIONCONTEXT *) calloc(1, sizeof(DUL_PRESENTATIONCONTEXT));
     if (pc == NULL) return EC_MemoryExhausted;
     lst = LST_Create();
-    if (lst == NULL) return EC_MemoryExhausted;
+    if (lst == NULL)
+    {
+        free(pc);
+        return EC_MemoryExhausted;
+    }
     pc->presentationContextID = presentationContextID;
     strcpy(pc->abstractSyntax, abstractSyntax);
     pc->result = ASC_P_NOTYETNEGOTIATED;
diff --git a/dcmpstat/apps/dcmmkcrv.cc b/dcmpstat/apps/dcmmkcrv.cc
index edfc2d7..a2a7560 100644
--- a/dcmpstat/apps/dcmmkcrv.cc
+++ b/dcmpstat/apps/dcmmkcrv.cc
@@ -216,6 +216,7 @@ int main(int argc, char *argv[])
        ||(!curveDescription)||(!axisUnits)||(!curveLabel))
     {
       OFLOG_FATAL(dcmmkcrvLogger, "out of memory");
+      delete [] array;
       return 1;
     }
 
@@ -270,7 +271,7 @@ int main(int argc, char *argv[])
       case 0: // US
         OFLOG_INFO(dcmmkcrvLogger, "creating curve, VR=US, points=" << idx/2);
         rawData = new Uint16[idx];
-        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); return 1; }
+        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); delete [] array; return 1; }
         byteLength = sizeof(Uint16)*idx;
         for (i=0; i<idx; i++) OFstatic_cast(Uint16 *,rawData)[i] = OFstatic_cast(Uint16,array[i]);
         align = sizeof(Uint16);
@@ -278,7 +279,7 @@ int main(int argc, char *argv[])
       case 1: // SS
         OFLOG_INFO(dcmmkcrvLogger, "creating curve, VR=SS, points=" << idx/2);
         rawData = new Sint16[idx];
-        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); return 1; }
+        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); delete [] array; return 1; }
         byteLength = sizeof(Sint16)*idx;
         for (i=0; i<idx; i++) OFstatic_cast(Sint16 *,rawData)[i] = OFstatic_cast(Sint16,array[i]);
         align = sizeof(Sint16);
@@ -286,7 +287,7 @@ int main(int argc, char *argv[])
       case 2: // FL
         OFLOG_INFO(dcmmkcrvLogger, "creating curve, VR=FL, points=" << idx/2);
         rawData = new Float32[idx];
-        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); return 1; }
+        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); delete [] array; return 1; }
         byteLength = sizeof(Float32)*idx;
         for (i=0; i<idx; i++) OFstatic_cast(Float32 *,rawData)[i] = OFstatic_cast(Float32,array[i]);
         align = sizeof(Float32);
@@ -294,7 +295,7 @@ int main(int argc, char *argv[])
       case 3: // FD
         OFLOG_INFO(dcmmkcrvLogger, "creating curve, VR=FD, points=" << idx/2);
         rawData = new Float64[idx];
-        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); return 1; }
+        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); delete [] array; return 1; }
         byteLength = sizeof(Float64)*idx;
         for (i=0; i<idx; i++) OFstatic_cast(Float64 *,rawData)[i] = OFstatic_cast(Float64,array[i]);
         align = sizeof(Float64);
@@ -302,15 +303,17 @@ int main(int argc, char *argv[])
       case 4: // SL
         OFLOG_INFO(dcmmkcrvLogger, "creating curve, VR=SL, points=" << idx/2);
         rawData = new Sint32[idx];
-        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); return 1; }
+        if (rawData==NULL) { OFLOG_FATAL(dcmmkcrvLogger, "out of memory"); delete [] array; return 1; }
         byteLength = sizeof(Sint32)*idx;
         for (i=0; i<idx; i++) OFstatic_cast(Sint32 *,rawData)[i] = OFstatic_cast(Sint32,array[i]);
         align = sizeof(Sint32);
         break;
       default:
         OFLOG_FATAL(dcmmkcrvLogger, "unknown data VR, bailing out");
+        delete [] array;
         return 1;
     }
+    delete [] array;
 
     DcmElement *element = NULL;
     switch (opt_curve_vr)
diff --git a/oflog/libsrc/striconv.cc b/oflog/libsrc/striconv.cc
index d9368d2..7a2627f 100644
--- a/oflog/libsrc/striconv.cc
+++ b/oflog/libsrc/striconv.cc
@@ -95,7 +95,6 @@ struct iconv_handle
                 STD_NAMESPACE ostringstream oss;
                 oss << "iconv_close failed: " << errno;
                 STD_NAMESPACE cerr << oss.str () << OFendl;
-                throw STD_NAMESPACE runtime_error (oss.str ().c_str ());
             }
         }
     }
