gpt4 book ai didi

python - 使用 free() 时出现无效指针错误

转载 作者:太空狗 更新时间:2023-10-30 02:44:51 24 4
gpt4 key购买 nike

我正在用 C(在 Linux (Ubuntu 14.04) 上)编写 Python 扩展,遇到了动态内存分配问题。我搜索了 SO 并发现了一些关于 free() 调用的帖子导致了类似的错误,因为 free() 试图释放不是动态分配的内存。但我不知道下面的代码是否/如何出现问题:

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

static PyObject* tirepy_process_data(PyObject* self, PyObject *args)
{
FILE* rawfile = NULL;
char* rawfilename = (char *) malloc(128*sizeof(char));
if(rawfilename == NULL)
printf("malloc() failed.\n");
memset(rawfilename, 0, 128);
const int num_datapts = 0; /* Just Some interger variable*/

if (!PyArg_ParseTuple(args, "si", &rawfilename, &num_datapts)) {
return NULL;
}

/* Here I am going top open the file, read the contents and close it again */

printf("Raw file name is: %s \n", rawfilename);
free(rawfilename);
return Py_BuildValue("i", num_profiles);
}

输出是:

Raw file name is: \home\location_to_file\
*** Error in `/usr/bin/python': free(): invalid pointer: 0xb7514244 ***

最佳答案

根据documentation :

These formats allow to access an object as a contiguous chunk of memory. You don’t have to provide raw storage for the returned unicode or bytes area. Also, you won’t have to release any memory yourself, except with the es, es#, et and et# formats.

(重点是我加的)

所以你不需要先用malloc()分配内存。之后您也不需要 free() 内存。

您的错误发生是因为您试图释放由 Python 提供/分配的内存。所以 C (malloc/free) 无法释放它,因为 C 运行时不知道它。

关于python - 使用 free() 时出现无效指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com