将 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>
存储字符串。
如果您有要放入容器中的指针,您可以选择。
- 只需复制指针,然后如果它指向的内容被另一个代码路径删除,您就会看到 "dangling pointer" 给出看似损坏的内容
- 改用智能指针
- 新建你自己的指针并复制内容,记得在某个时候清除它,否则你会占用大量内存。
- 复制指针的内容
对于您的情况,您可能会发现最简单的方法是将 LPCSTR 复制到 std::string 并将它们放入向量中。
首先请原谅我的英语不好。
我有一个生成 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>
存储字符串。
如果您有要放入容器中的指针,您可以选择。
- 只需复制指针,然后如果它指向的内容被另一个代码路径删除,您就会看到 "dangling pointer" 给出看似损坏的内容
- 改用智能指针
- 新建你自己的指针并复制内容,记得在某个时候清除它,否则你会占用大量内存。
- 复制指针的内容
对于您的情况,您可能会发现最简单的方法是将 LPCSTR 复制到 std::string 并将它们放入向量中。