diff --git a/icu4c/source/test/intltest/dtfmttst.cpp b/icu4c/source/test/intltest/dtfmttst.cpp
index fc0a5f6..3bd5136 100644
--- a/icu4c/source/test/intltest/dtfmttst.cpp
+++ b/icu4c/source/test/intltest/dtfmttst.cpp
@@ -3478,6 +3478,7 @@
         UnicodeString actual;
 
         SimpleDateFormat smptfmt("Z", locale, status);
+        ASSERT_OK(status);
         assertEquals("TimeZone from SimpleDateFormat constructor",
                      expectedTimezone, smptfmt.getTimeZone().getID(actual));
         assertEquals("Calendar from SimpleDateFormat constructor",
@@ -3485,13 +3486,20 @@
 
         LocalPointer<DateFormat> datefmt(
                 DateFormat::createDateInstance(DateFormat::kDefault, locale));
+        if (datefmt == nullptr) {
+            dataerrln("Error calling DateFormat::createDateInstance()");
+            return;
+        }
         assertEquals("TimeZone from DateFormat::createDateInstance",
                      expectedTimezone, datefmt->getTimeZone().getID(actual));
         assertEquals("Calendar from DateFormat::createDateInstance",
                      testLine[2], datefmt->getCalendar()->getType());
-
         LocalPointer<DateFormat> timefmt(
                 DateFormat::createTimeInstance(DateFormat::kDefault, locale));
+        if (timefmt == nullptr) {
+            dataerrln("Error calling DateFormat::createTimeInstance()");
+            return;
+        }
         assertEquals("TimeZone from TimeFormat::createTimeInstance",
                      expectedTimezone, timefmt->getTimeZone().getID(actual));
         assertEquals("Calendar from DateFormat::createTimeInstance",
@@ -3500,6 +3508,10 @@
         LocalPointer<DateFormat> datetimefmt(
                 DateFormat::createDateTimeInstance(
                     DateFormat::kDefault, DateFormat::kDefault, locale));
+        if (datetimefmt == nullptr) {
+            dataerrln("Error calling DateFormat::createDateTimeInstance()");
+            return;
+        }
         assertEquals("TimeZone from DateTimeFormat::createDateTimeInstance",
                      expectedTimezone, datetimefmt->getTimeZone().getID(actual));
         assertEquals("Calendar from DateFormat::createDateTimeInstance",
diff --git a/icu4c/source/test/intltest/numfmtst.cpp b/icu4c/source/test/intltest/numfmtst.cpp
index 3be453f..86e1032 100644
--- a/icu4c/source/test/intltest/numfmtst.cpp
+++ b/icu4c/source/test/intltest/numfmtst.cpp
@@ -10013,7 +10013,13 @@
         ParsePosition ppos;
 
         DecimalFormatSymbols dfs(Locale::getEnglish(), status);
+        if (status.errDataIfFailureAndReset()) {
+            return;
+        }
         DecimalFormat df(patternString, dfs, status);
+        if (status.errDataIfFailureAndReset()) {
+            return;
+        }
         df.setLenient(FALSE);
         LocalPointer<CurrencyAmount> ca_strict(df.parseCurrency(inputString, ppos));
         if (ca_strict != nullptr) {
