为什么我不能释放c中的ctypes内存?

问题描述 投票:0回答:1

我有一个 python 文件,它尝试从使用 ctypes 创建的数组中释放内存:

import ctypes
import os

# Load the DLL
script_dir = os.path.dirname(os.path.abspath(__file__))
dll_path = os.path.join(script_dir, "test.dll")
funcs = ctypes.CDLL(dll_path)

funcs.free_arr.argtypes = [ctypes.POINTER(ctypes.c_int)]

ids = [1, 2, 3]
ids_arr = (ctypes.c_int * len(ids))(*ids)
funcs.free_arr(ids_arr)

我的 c 文件如下所示:

#include <stdio.h>
#include <stdlib.h>

void free_arr(int* ids) {
    free(ids);
}

但是,当我编译 c 文件并运行 python 文件时,我收到 code=3221226356 错误。怎么了? python 会自动释放数组吗?我希望能够释放 c 中的数组,以便我有更多的控制权。

memory heap-memory ctypes dynamic-memory-allocation
1个回答
0
投票

Python 拥有内存,并在对 Python 对象的引用变为零时释放它。对象不仅仅包含它所包装的内存。

© www.soinside.com 2019 - 2024. All rights reserved.