当我关闭我的应用程序时,我会继续这样做。 我知道它与JsonCpp有关,因为只有当我使用Json值时才会发生。
我认为这与我如何创建json值有关,但因为没有任何教程我不知道应该怎么做
我的代码目前是:
static Json::Value root; // will contains the root value after parsing.
unsigned int WindowSettings::WindowWidth = 800;
unsigned int WindowSettings::WindowHeight = 600;
bool WindowSettings::FullScreen = false;
unsigned short WindowSettings::AntiAliasing = 16;
bool WindowSettings::VSync = false;
short WindowSettings::FrameRateLimit = 60;
AspectRatios WindowSettings::AspectRatio = ar4p3;
Resolutions WindowSettings::Resolution = r800x600;
Json::Value WindowSettings::root = Json::Value();
void WindowSettings::remakeDefault()
{
root["WindowWidth"] = WindowWidth;
root["WindowHeight"] = WindowHeight;
root["FullScreen"] = FullScreen;
root["AntiAliasing"] = AntiAliasing;
root["VSync"] = VSync;
root["FrameRateLimit"] = FrameRateLimit;
root["AspectRatio"] = AspectRatio;
root["Resolution"] = Resolution;
saveToFile("conf.json");
}
bool WindowSettings::saveToFile(const std::string &fileName)
{
Json::FastWriter writer;
// Make a new JSON document for the configuration. Preserve original comments.
std::string outputConfig = writer.write( root );
std::ofstream myfile;
myfile.open (fileName.c_str(), std::ios::out | std::ios::trunc | std::ios::binary );
if (myfile.is_open())
{
myfile << outputConfig.c_str();
myfile.close();
}
return true;
}
我应该补充一点,当我不这样做时不会发生: root [“blah”] = foo;
答案 0 :(得分:2)
修改强>
发现这是一个已知问题(例如here)
原来这是由于jsoncpp中的某种错误导致它无法作为全局变量工作。我认为全球变量是坏消息的旧概念很难摆脱。 S * o我把我所有的json都从全局包裹起来,它现在工作正常。无论如何,较少的全局变量肯定是一个很好的举动 *。
错误报告(zeromus):http://sourceforge.net/tracker/index.php?func=detail&aid=2934500&group_id=144446&atid=758826
状态为FIXED:
我通过表示Value对ValueAllocator的给定实例具有隐式依赖性这一事实来修复它,方法是给它一个ValueAllocatorHandle,它只是引用计数,并在最后一个Value消失时负责删除堆分配的分配器。范围。
一般来说,我的怀疑是构造函数/析构函数访问导致UB的虚拟成员(可能根本就缺少虚拟析构函数)。
由于你提到app关闭,static Json::Value root
是一个嫌疑人。如果这是在linux上,我会在valgrind
sudo -E valgrind --db--attach=yes ./yourprogram
这可确保您拥有必要的权限。当然,使用调试信息进行编译会很有帮助。