C++ 使用静态c++;getter而不是简单地访问变量会导致SIGSEGV ndk

C++ 使用静态c++;getter而不是简单地访问变量会导致SIGSEGV ndk,c++,android-ndk,java-native-interface,C++,Android Ndk,Java Native Interface,我遇到了一个非常奇怪的运行时错误: 我有以下课程 class Application { public: Application(){} Application(Window* w) :window(w) {}; static std::string const& getDataStorageDirectory(){ return dataStorageDir; } static std::string dataStorageDir; Wi

我遇到了一个非常奇怪的运行时错误: 我有以下课程

class Application {
public:
  Application(){}
  Application(Window* w)
  :window(w)
  {};

  static std::string const& getDataStorageDirectory(){
      return dataStorageDir;
  }

  static std::string dataStorageDir;
  Window* window;
};
在Application.cpp中,我初始化它:
std::string Application::dataStorageDir=“asd”

现在,我以一种“标准”的方式使用opengles/ndk(自己的活动和自己的GLSurfaceView.Renderer(它正在运行另一个线程)

现在如果我在代码中使用:
LOGI(“数据存储:%s”,Application::dataStorageDir.c_str());

然后它工作得很好,但是如果我使用:
std::string p=Application::getDataStorageDirectory();
LOGI(“数据存储(渲染器):%s”,p.c_str());

然后以SIGSEGV结束


是什么导致了这个问题?

只是想确定一下-您两次尝试之间的唯一区别是获取字符串的这一行?还有,崩溃在LOGI行上吗?是的,这是唯一的区别。另一个可能更好的例子:崩溃在Application::getDataStorageDirectory()上;好的,这可能是因为我从我的一个构造函数调用了这些代码。我会更深入地挖掘这个主题吗