微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构造后 const char* 的值返回空

如何解决构造后 const char* 的值返回空

将此 Vector3 转换为 const char* 已在隐式和显式转换中起作用,但在构造时尝试将其转换时却没有。只有这样 const char* 'v3pchar' 返回空白。有什么想法吗?完整代码如下。谢谢!

.save_word2vec_format(path,binary=False)

解决方法

   v3pchar = v3string.c_str();

const char * 返回的 c_str() 指针归其 std::string 所有,并且仅在 std::string 被修改或被销毁之前有效,以先到者为准。胶囊摘要:一旦 v3string 被修改或销毁,v3pchar 就不再有效。

   const char* v3 = Vector3(4,5,6);

这会导致以下事件序列:

  1. 创建并构造了一个临时 Vector3 对象。
  2. 它的 operator const char* 方法被调用,并返回一个由内部 const char * 拥有的 std::string,该内部 Vector3const char * 对象的成员。
  3. 返回的 v3 被分配给 Vector3
  4. 临时 std::string 对象及其 const char * 成员被销毁。
  5. 它跟随着最初返回的 std::string 指针不再有效,因为拥有它的 const char * 对象现在已被销毁。

ismemberof(N,H) :- member(N,_,H),!. 指针的任何后续使用都会导致未定义的行为。

应该可以修改显示的代码,使用现代 C++ 中的一些特性,这些特性会导致此构造变得格式错误(类方法引用限定符),并让您的 C++ 编译器捕获此常见错误。但那将是另一个问题;至于您观察到的结果的原因:由于上述原因,这是未定义的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。