我在 C++ 中创建了一个 MySQL 聚合 UDF。我char*
从 MySQL 聚合 UDF 的最终函数返回。在void xxx_deinit(UDF_INIT initid)
我正在释放我的函数使用的任何内存。我通过删除init->ptr
.
我的 deinit 函数:
extern "C" void xxx_deinit(UDF_INIT * initid)
{
delete initid->ptr;
}
在 init 函数中,我初始化ptr
如下:
extern "C" bool xxx_init(UDF_INIT * initid, UDF_ARGS * args, char* message)
{
const char* demo = "demo";
initid->ptr = (char*) demo;
return 0;
}
我能够创建 UDF 并将其安装在 MySQL 服务器中。安装后,当我尝试调用该函数时,会弹出一条错误消息,如下所示:
Error Code: 2013. Lost connection to MySQL server during query
delete initid->ptr;
但是当我从函数中删除 line:时xxx_deinit(UDF_INIT * initid)
,我得到了所需的输出。但我猜这是错误的方法,因为它会导致内存泄漏。此外,相同的语句:delete initid->ptr;
在返回类型的简单 UDF 的情况下不会产生错误char*
。谁能告诉我我在这里做错了什么?任何形式的帮助或建议都会有很大帮助。提前致谢。
谁能帮我解决这个问题。