一个愚蠢的问题来了。libpq
的PQerrorMessage
函数返回一个char const*
char const* msg = PQerrorMessage(conn);
现在既然它是const
,我认为我不应该释放它,而且我从未在任何示例中看到这样做过。但是,它何时以及如何被释放?它怎么知道我什么时候用完了我的msg
指针?
起初我认为一旦请求另一个错误消息,它就会被释放,但事实并非如此。
// cause some error
char const* msg1 = PQerrorMessage(pgconn);
// cause another error
char const* msg2 = PQerrorMessage(pgconn);
// still works
std::cout << msg1 << msg2 << std::endl;
有人可以为我解释一下吗?
编辑:感谢 Dmitriy Igrishin
我在 postgresql 邮件列表上问了这个问题,结果证明我最初的假设是正确的。指针不应该是有效
的,不知何故我很幸运。msg1
编辑:来自 postgresql 文档
PQerrorMessage
返回由对连接的操作最近生成的错误消息。
char *PQerrorMessage(const PGconn *conn);
几乎所有的 libpq 函数都会在
PQerrorMessage
失败时设置消息。请注意,按照 libpq 约定,非空PQerrorMessage
结果可以由多行组成,并且将包括一个尾随换行符。调用者不应直接释放结果。PGconn
当关联的句柄传递给时,它将被释放PQfinish
。不应期望结果字符串在PGconn
结构上的操作中保持相同。