diff --git a/example/example20.cpp b/example/example20.cpp
index 7066e32..1d4088f 100644
--- a/example/example20.cpp
+++ b/example/example20.cpp
@@ -21,17 +21,29 @@
     float z;
 };
 
+std::ostream& operator<<(std::ostream& os, const Struct& v) {
+    return os << v.x << "," << v.y << "," << v.z;
+}
+
 struct PackedStruct {
     bool x;
     uint32_t y;
     float z;
 } __attribute__((packed));
 
+std::ostream& operator<<(std::ostream& os, const PackedStruct& v) {
+    return os << v.x << "," << v.y << "," << v.z;
+}
+
 struct NestedStruct {
     Struct a;
     PackedStruct b;
 } __attribute__((packed));
 
+std::ostream& operator<<(std::ostream& os, const NestedStruct& v) {
+    return os << v.a << "|" << v.b;
+}
+
 template <typename T>
 py::array mkarray_via_buffer(size_t n) {
     return py::array(py::buffer_info(nullptr, sizeof(T),
@@ -59,6 +71,13 @@
     return arr;
 }
 
+template <typename S>
+void print_recarray(py::array_t<S> arr) {
+    auto buf = arr.request();
+    auto ptr = static_cast<S*>(buf.ptr);
+    for (size_t i = 0; i < buf.size; i++)
+        std::cout << ptr[i] << std::endl;
+}
 
 void print_format_descriptors() {
     std::cout << py::format_descriptor<Struct>::value() << std::endl;
@@ -75,4 +94,7 @@
     m.def("create_rec_packed", &create_recarray<PackedStruct>);
     m.def("create_rec_nested", &create_nested);
     m.def("print_format_descriptors", &print_format_descriptors);
+    m.def("print_rec_simple", &print_recarray<Struct>);
+    m.def("print_rec_packed", &print_recarray<PackedStruct>);
+    m.def("print_rec_nested", &print_recarray<NestedStruct>);
 }
diff --git a/example/example20.py b/example/example20.py
index 83a914c..78e717d 100644
--- a/example/example20.py
+++ b/example/example20.py
@@ -3,7 +3,8 @@
 
 import numpy as np
 from example import (
-    create_rec_simple, create_rec_packed, create_rec_nested, print_format_descriptors
+    create_rec_simple, create_rec_packed, create_rec_nested, print_format_descriptors,
+    print_rec_simple, print_rec_packed, print_rec_nested
 )
 
 
@@ -28,6 +29,12 @@
     check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], simple_dtype)
     check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], packed_dtype)
 
+    # uncomment lines below to cause a segfault upon exit in Py_Finalize :(
+
+    # if dtype == simple_dtype:
+    #     print_rec_simple(arr)
+    # else:
+    #     print_rec_packed(arr)
 
 nested_dtype = np.dtype([('a', simple_dtype), ('b', packed_dtype)])
 
@@ -40,3 +47,4 @@
 check_eq(arr, [((False, 0, 0.0), (True, 1, 1.5)),
                ((True, 1, 1.5), (False, 2, 3.0)),
                ((False, 2, 3.0), (True, 3, 4.5))], nested_dtype)
+# print_rec_nested(arr)
