我在執行字符串標記化時面臨內存損壞和崩潰。第一次處理時不會發生崩潰。它需要一個多小時才能崩潰。所述problemmatic字符串標記化期間的內存損壞
wchar_t *query = new wchar_t[inQry.length() + 1];
memset(query, NULL, inQry.length() + 1);
memcpy(query, inQry.c_str(), inQry.size());
wchar_t *Tok = wcstok(query, L" ");
headStr = L"";
tableName = L"QUERY";
while(Tok != NULL)
{
vectorSQLEntry.push_back(Tok);
Tok = wcstok(NULL, L" ");
}
int tokCount = vectorSQLEntry.size();
if(query != NULL)
{
delete query;
}
當與DebugDiag資料和分析中創建的轉儲diagonized,它指出在代碼中的一些其他線(有時行會delete query
)。 所以我刪除了query
作爲指針並聲明爲wstring。我刪除了headStr
和tableName
之間的初始化 wcstok和while循環(代碼如下)。
wstring tmpQuery = inQry;
wchar_t *Tok = wcstok((wchar_t*)tmpQuery.c_str(), L" ");
while(Tok != NULL)
{
vectorSQLEntry.push_back(Tok);
Tok = wcstok(NULL, L" ");
}
使用此代碼不會發生崩潰。那麼初始代碼有什麼問題?這次事故讓我拖了兩天多。
'vectorSQLEntry'持有什麼?什麼是確切的類型? – StoryTeller
矢量的定義 - 矢量 vectorSQLEntry; –
當你有內存損壞的問題時,你也應該證明Valgrind無法識別問題 - 否則它看起來好像你還沒有嘗試過。 –