diff --git a/prism/include/JDD.h b/prism/include/JDD.h
index 8451d5f1..26a63a50 100644
--- a/prism/include/JDD.h
+++ b/prism/include/JDD.h
@@ -667,3 +667,22 @@ JNIEXPORT void JNICALL Java_jdd_JDD_DD_1ExportMatrixToSpyFile
}
#endif
#endif
+/* Header for class jdd_JDD_CuddOutOfMemoryException */
+
+#ifndef _Included_jdd_JDD_CuddOutOfMemoryException
+#define _Included_jdd_JDD_CuddOutOfMemoryException
+#ifdef __cplusplus
+extern "C" {
+#endif
+#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID
+#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3042686055658047285LL
+#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID
+#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3387516993124229948LL
+#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID
+#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -7034897190745766939LL
+#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID
+#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3094099053041270477LL
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/prism/src/jdd/JDD.java b/prism/src/jdd/JDD.java
index 071cd2bc..3ad0ecfb 100644
--- a/prism/src/jdd/JDD.java
+++ b/prism/src/jdd/JDD.java
@@ -121,6 +121,23 @@ public class JDD
private static native void DD_ExportMatrixToMatlabFile(long dd, long rvars, int num_rvars, long cvars, int num_cvars, String name, String filename);
private static native void DD_ExportMatrixToSpyFile(long dd, long rvars, int num_rvars, long cvars, int num_cvars, int depth, String filename);
+ /**
+ * An exception indicating that CuDD ran out of memory or that another internal error
+ * occurred.
+ *
+ * This exception is thrown by ptrToNode if a NULL pointer is returned by one of the native
+ * DD methods. It is generally not safe to use the CuDD library after this error occurred,
+ * so the program should quit as soon as feasible.
+ */
+ public static class CuddOutOfMemoryException extends RuntimeException {
+ private static final long serialVersionUID = -3094099053041270477L;
+
+ /** Constructor */
+ CuddOutOfMemoryException() {
+ super("The MTBDD library CuDD seems to have run out of memory or encountered an internal error.");
+ }
+ }
+
static
{
try {
@@ -1336,10 +1353,14 @@ public class JDD
/**
* Convert a (referenced) ptr returned from Cudd into a JDDNode.
+ *
Throws a CuddOutOfMemoryException if the pointer is NULL.
*
[ REFS: none ]
*/
public static JDDNode ptrToNode(long ptr)
{
+ if (ptr == 0L) {
+ throw new CuddOutOfMemoryException();
+ }
return new JDDNode(ptr);
}