关于C++中使用zookeeper,get数据的时候报的错
工作使用的是虚拟机,前段时间虚拟机重新分配,将zookeeper相关拷贝到了新的虚拟机上。
#include <string>
#include <BtLog.hpp>
#include <ZooKeeper.hpp>
int main(int argc, char** argv)
{
BTLOG_INIT("test.log", btlog::CBtLogger::DEBUG, true);
BTLOG_DEBUG("zk test start");
std::string zkHosts = "192.168.1.66:2182";
CZooKeeper zk;
zk.setHostList(zkHosts);
if (!zk.connect())
{
std::cerr << "connect to zk failed" << std::endl;
return false;
}
else
{
std::cout<< "connetc successed" << std::endl;
}
std::string path = "/card/lc/";
CAMFType pRet = zk.get(path, false);
CAMFObject& ret = pRet;
std::string err = ret["err"];
if (err != "ok")
{
std::cerr << "get config for path " << path << " failed:" << err << std::endl;
return false;
}
CAMFObject& config = ret["value"];
std::string configData = config["config.xml"].toString();
std::cout << configData << std::endl;
return 0;
}
问题出现在红字所标示的地方,断点后有如下错误日志
connetc successed
Program received signal SIGSEGV, Segmentation fault.
0x000000000040e957 in CZooKeeper::get (this=Cannot access memory at address 0x7fffff63a198
关键是如果用以前的虚拟机(有的同事的机器没有更换)获取该虚拟机上的信息是可以连接和正常执行,说明现在的zookeeper是可用的。
其他相关信息:
执行失败的机器的信息ZOO_INFO@log_env@670: Client environment:os.arch=3.10.0-123.el7.x86_64
执行成功的机器的信息ZOO_INFO@log_env@670: Client environment:os.arch=2.6.32-71.el6.x86_64
问题有些怪异,哪位大神遇到过类似问题或者提供一个解决方向。