У меня возникла странная проблема, которая не имеет для меня никакого смысла.Проблемы с сохранением объектов в живых
У меня есть структура (которая содержит строку) на API определяется следующим образом:
typedef struct sNCharcb
{
char * pData;
int iDataLen;
}
tsNCharcb;
мне нужно сохранить глубокую копию этой структуры. Я создал функцию полезности, чтобы сделать копию этой структуры:
inline sNCharcb rapi_strcpy(const sNCharcb &rapistr)
{
sNCharcb res;
res.pData = new char[rapistr.iDataLen];
strcpy(res.pData, rapistr.pData);
res.iDataLen = rapistr.iDataLen;
return res;
}
создать копии этих структур «sNCharcb» с помощью этого метода полезности и сохранять их ссылаться на переменные в родительском объекте:
stored_sNCharcb = rapi_strcpy(sNCharcb_to_copy);
Спустя некоторое время эти сохраненные значения изменяются магически, чтобы содержать какой-то случайный мусор. Родительский объект, в котором хранятся эти значения, постоянно находится в пределах области действия и не разрушен. Что может привести к преждевременному стиранию этих ценностей?
есть причина, почему вы не 'станд :: string' вместо этого? –
Вы должны, вероятно, реализовать значимые конструкторы копирования, оператор присваивания и деструктор для этого класса. Или пометьте вопрос как C. Или просто используйте элемент данных 'std :: string' вместо' char * ', и все проблемы исчезнут. – juanchopanza
Это API, который я не могу изменить. Мне нужно играть с строками C, нравится мне это или нет. –