奇怪的c++内存问题.正在更改的Const指针
Weird C++ memory issue. Const pointer being changed
解决方案找到
问题描述:我正在使用一个旧的C库,并有一个类,正在接收一个const char *作为一个函数的参数。该函数创建了一个动态对象,并使用const char *作为实参将其存储在链表中。
问题是,在这样做之后,传递给函数的const char *在类外部的内存中被修改。这将破坏节点中的数据。
解决方案:使用std::string作为类中的数据类型。当const char *作为一个值传递给字符串时,字符串会为你负责内存管理。
我学到了什么?当使用c++时,总是使用string,并且只有在某些C库中需要时才使用char *和string.c_str()。
谢谢。你拯救了我的周末。
buff在堆栈上创建。你将buff传递给Cache。找到,它最终成为节点的键。下次处理连接时,由于退出了声明buff的函数,因此将重用buff占用的内存。所以你的钥匙消失了/被丢弃了。从根本上说,你有指向内存的指针,这些指针不再有效。
这就是为什么你不应该尝试自己滚动,而应该使用std::map。
加上你似乎有多个线程修改全局变量没有任何同步
您可以进一步简化。通过浏览代码,这是我的猜测。基本上,你做错的是:
const char* a;
{
std::string f("foo");
a = f.c_str();
}
doSomethingWith(a);
我的建议:完全远离char*
。如果在某些地方绝对必须使用它们,请了解对象生存期,以及如何保持指针不会以任何方式延长其生存期。我并不是说"在你更好地理解它们之前不要使用char*
"——我认为我对它们理解得很好,并且在可能的情况下仍然避免使用它们。我的意思是"如果你正在使用C代码(或c++代码,在这方面看起来像C代码),请使用它们。"
另外,上面的评论是绝对正确的。尽可能精简你的问题(这可能已经给你答案了),并在这里以一种独立的方式描述它。
- 将const指针(EVP_MD)保存到变量中,以将其重新使用为类方法(HMAC)
- std :: allocator_traits ::用const指针构造
- 汇编问题试图使用qobject_cast进行const指针
- C++ 两个具有相互指向 const 指针的对象
- 我想将指向 const 对象的指针放入包含非 const 指针的容器中.我有什么选择
- 传统代码突变const指针.任何合法的原因
- C#等效于C 中的const指针
- 返回指向 const 数据成员和 'auto' 关键字的 const 指针。有点困惑
- 函数返回由const指针向量生成的指针
- 您如何使用成员正确初始化构造的结构,该构件是指向const值的const指针
- 使用 const 指针的 C 样式字符返回不正确的结果
- 有没有办法将 std::stack<pointer> 转换为 std::stack<const 指针>?
- 为什么当 typedef const 指针与额外的 const 一起使用时,编译器不会给出错误?
- 如何将const_cast的const指针向量映射到非常量指针向量
- 什么场景可能需要使用 需要 const 指针指向(非常量常量)数据
- 强制转换 const 指针以使用旧版 C 代码
- const ref 和 const 指针 c++ 之间的区别
- 将 const 传递给接受 const 指针的函数是不正确的
- 指向指针数组的Const指针
- C++Const指针声明