将 lpcstr 推送到 Vector 或 List 时,其值已损坏

The value of lpcstr was corrupt when push it on Vector or List

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

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

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 的值!! 我有一个只有一个值的 list/vector!!!

请帮帮我!> 谢谢

您一开始就不应该在向量中存储指针,因为它需要您手动管理分配给指针的内存。该向量将只管理它自己的内存(包括指针),但不会这些指向的内容。

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

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

  1. 只需复制指针,然后如果它指向的内容被另一个代码路径删除,您就会看到 "dangling pointer" 给出看似损坏的内容
  2. 改用智能指针
  3. 新建你自己的指针并复制内容,记得在某个时候清除它,否则你会占用大量内存。
  4. 复制指针的内容

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