返回matches
数组时,返回的是第一个元素的地址。这是存储在堆栈里面的my_completion
。一旦您从my_completion
该内存返回,将被回收并且(很可能)最终将被重用于其他东西,覆盖存储在其中的值matches
- 是的,这很可能是您的应用程序无法工作的原因 - 如果不是现在,可能会在您修复了一些其他问题,或对其进行了一些更改或其他一些事情之后,因为这不是您可以安全忽略的那些小警告之一。
您可以通过几种不同的方式解决此问题。最明显的是简单地使用std::vector<char *>
[or better yet std::vector<std::string>
] 代替:
std::vector<std::string> ReadLineImpl::my_completion ()
{
std::vector<std::string> strings;
strings.push_back("add");
return strings;
}
编辑:所以,如果库需要char **
按照readline
接口,那么使用这个:
char** ReadLineImpl::my_completion ()
{
char **matches = static_cast<char **>malloc(1 * sizeof(char *));
matches[1] = "add";
return matches;
}
问题解决了!