【发布时间】:2013-08-25 12:29:47
【问题描述】:
我对 std::string 如何处理它的复制(?)内存感到困惑。
当我尝试这样做时:
char* abc = new abc[512];
abc = "abcdef";
std::string tempstr(abc);
tempstr[0] = 'Y';
std::cout << tempstr.c_str() << std::endl;
std::cout << abc << std::endl;
我得到以下输出:
Ybcdef
abcdef
但如果我尝试释放由 new 分配的内存,请在末尾添加:
delete [] abc;
我收到内存错误 (_BLOCK_TYPE_IS_VALID) 现在我的问题是,这怎么可能?字符串似乎复制了 abc 的数据,保持原样,但由于某种原因,我无法删除它。
我问这个,因为我的代码中有以下情况:
char* somestring = new char[1024];
// something happens to somestring here
stack.push_back(somestring); // stack is a vector of strings
我想知道我应该在哪里释放一些字符串分配的内存。
【问题讨论】:
-
您正在尝试删除字符串文字。
new在这里是非常不必要的。 -
abc = "abcdef";不会像你想的那样做......它重新分配一个指针,它确实不将字符写入先前分配的内存中。 -
不,这不可能是那个难以掌握......不,不,不,我第一次明白这一点我已经读过了。再次通读该初学者的 C++ 教程,请不要将 SO 与傻瓜混为一谈。
标签: c++ string memory-leaks