У меня есть карта и процесс для добавления таких данных:
interface CDBColumnInfo
: public IDBColumnInfo
{
public:
CDBColumnInfo();
~CDBColumnInfo();
private:
map<int,_bstr_t> m_rowIndexDataMap ;
HRESULT AddDataToMap(){
_bstr_t record;
for (int rownum = 0; rownum < num_rows; ++rownum){
const int num_cols = PQnfields(res);
record = "";
for (int colnum = 0; colnum < num_cols; ++colnum) {
if (PQgetisnull(res, rownum, colnum) == 0) {
_bstr_t data = PQgetvalue(res, rownum, colnum);
record = record + data;
}
else {
record = record + "<NULL>";
}
if (colnum + 1 < num_cols) {
record = record + "#";
}
}
m_rowIndexDataMap[rownum] = record;
}
}
После завершения программы я очищаю карту в деструкторе:
CDBColumnInfo::~CDBColumnInfo() {
m_rowIndexDataMap.clear();
}
Я получил исключение при завершении деструктора:
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 904
Expression: _CrtIsValidHeapPointer(block)
Я попытался зациклить карту и вручную определить, что исключение произошло в 1-м элементе:
for (auto it = m_rowIndexDataMap.cbegin(); it != m_rowIndexDataMap.cend() ;)
{
it = m_rowIndexDataMap.erase(it); // exception happened at first element
}
m_rowIndexDataMap.clear();
Что не так с данными на карте?