Eryk Sun added the comment: Limiting the pointer-type cache could be a problem. It's expected that POINTER() returns a reference to an existing pointer type. ctypes uses Python types to ensure compatible C data types. For example:
LP_c_int = ctypes.POINTER(ctypes.c_int) class LP_c_int_uncached(ctypes._Pointer): _type_ = ctypes.c_int >>> arr = (LP_c_int * 2)() >>> ctypes.POINTER(ctypes.c_int) is LP_c_int True >>> arr[0] = ctypes.POINTER(ctypes.c_int)() >>> arr[1] = LP_c_int_uncached() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: incompatible types, LP_c_int_uncached instance instead of LP_c_int instance The docs could warn users that the cache used by ctypes.POINTER(), and implicitly by ctypes.pointer(), will leak memory if it's called with a type that's created at function scope instead of at module or class-body scope. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue27932> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com