首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将lpcstr推入向量或列表时,lpcstr的值已损坏。

当将lpcstr推入向量或列表时,lpcstr的值已损坏。
EN

Stack Overflow用户
提问于 2015-10-15 10:15:01
回答 2查看 240关注 0票数 0

首先,请原谅我英语不好。

我有一个函数,它生成一个LPCSTR值列表,我想将它们全部添加到list<LPCSTR>vector<LPCSTR>中,这是我的示例代码:

代码语言:javascript
复制
vector<LPCSTR> output={}; // or list<LPCSTR>

...

for (....)
{

    auto anItem = static_cast<LPSTR>(malloc(20));
    sprintf_s(anItem, 20, "string format", values...);
    output.push_back(anItem);

    /* The problem */
}   //free(anItem);  when i free the allocated memory of anItem then added item to output was being corrupt  !

如果我释放分配的内存,那么数据就被破坏了,否则我就有一个巨大的未使用内存!如果我在循环之前减速auto anItem = static_cast<LPSTR>(malloc(20));,那么添加到ouput中的所有项都是当前anItem的值!!而且我只有一个值的列表/向量!

请帮帮我!>谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-15 10:19:58

如果您有希望放入容器中的指针,则可以选择。

  1. 只需复制指针,然后如果它所指向的内容被另一个代码路径删除,则会有一个“悬空指针”,当您观察到时,会给出似乎已损坏的内容。
  2. 使用智能指针代替
  3. 创建自己的指针并复制内容,并记住在某个时候清除这一点,否则就会占用内存。
  4. 复制指针的内容

对于您的情况,您可能会发现最容易将LPCSTR复制到std::string中,并将它们放入向量中。

票数 0
EN

Stack Overflow用户

发布于 2015-10-15 10:16:59

首先,不应该在向量中存储指针,因为它要求手动管理分配给指针的内存。向量只管理自己的内存(其中包括指针),但不管理它们指向的内容。

使用vector<string>存储字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33145812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档