#c #memory-leaks
#c #утечки памяти
Вопрос:
Я новичок в C / C и управлении памятью
Я получил утечку памяти в программе и использую визуальный детектор утечки для поиска.
_bstr_t record = "";
for (int rownum = 0; rownum < num_rows; rownum) {
const int num_cols = PQnfields(res2);
for (int colnum = 0; colnum < num_cols; colnum) {
if (PQgetisnull(res2, rownum, colnum) == 0) {
string data = PQgetvalue(res2, rownum, colnum);
record = record data.c_str();
}
else
{
record = record L"<NULL>";
}
if (colnum 1 < num_cols) {
record = record "#";
}
}
recordMap[rownum] = record;
PQclear(res2);
}
И это указывает на то, что строка record = record data.c_str();
вызывает утечку памяти.
Я пытался ::SysFreeString(record)
, но не сработало
Есть какой-нибудь способ это сделать?
Комментарии:
1. Что такое
bstr_t
?2. @Shawn Моя ошибка. Это должно быть
_bstr_t
3. Тот же вопрос. Это что-то, что вы написали, из библиотеки, что ли?
4. @Shawn, да, это из библиотеки
5. Было бы полезно указать, какой именно…
Ответ №1:
Я думаю, что утечка памяти происходит в bstr_t
операторе присваивания или operator. Вы должны проверить это.
Комментарии:
1. Привет, @Quy Phan. Я так думаю, но я не знаю, как это исправить, не могли бы вы помочь мне советом?
2. Попробуйте заменить его на record = data.c_str(); Не уверен, работает ли это, но я помогу вам дальше, если это не так.
3. Думать — это хорошо, слишком мало людей, похоже, этим занимаются, но знать лучше. Чтобы сделать это хорошим ответом, вы бы объяснили, почему вы так думаете, и предложили предложения о том, как это исправить.