Значение lpcstr было повреждено при нажатии на Vector или 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!!
И у меня есть список / вектор только одного значения !!!

пожалуйста, помогите мне!>
Спасибо

0

Решение

Если у вас есть указатели, которые вы хотите поместить в контейнер, у вас есть выбор.

  1. Просто скопируйте указатель, и затем, если то, на что он указывает, будет удалено другим путем кода, у вас будет «висячий указатель», дающий, казалось бы, испорченное содержимое при просмотре
  2. Вместо этого используйте умный указатель
  3. Создайте свой собственный указатель, скопируйте содержимое и не забудьте очистить его в какой-то момент, иначе у вас возникнет проблема с памятью.
  4. Скопируйте содержимое указателя

В вашем случае вам может быть проще скопировать LPCSTR в std :: string и поместить их в вектор.

0

Другие решения

Для начала вам не следует хранить указатели внутри вектора, поскольку для этого необходимо вручную управлять памятью, выделенной указателям. Вектор будет управлять только своей собственной памятью (которая включает в себя указатели), но не на что они указывают.

использование vector<string> хранить строки.

0

По вопросам рекламы [email protected]