0

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

我有一个生成 LPCSTR 值列表的函数,我想将它们中的每一个都添加到list<LPCSTR>or 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!我有一个只有一个值的列表/向量!!!

请帮助我!>谢谢

4

2 回答 2

0

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

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

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

于 2015-10-15T10:19:58.453 回答
0

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

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

于 2015-10-15T10:16:59.060 回答