g++ とマッドフラップを使用しています。コードを実行すると、マッドフラップが二重解放について不平を言っている場所で中止されます。
*** glibc detected *** /mydir/MYMain: double free or corruption (out): 0x0000000002127880 ***
gdb で実行すると、中断する場所を確認できます。
queue<string> logQueue;
void someThreadSpawnFunction() {
string str;
while(true) {
{
boost::scoped_lock sl( aMutex);
// thread wait for loqQueue to have item
str = logQueue.front(); // <--------------- Aborts here.
logQueue.pop();
}
//write out string
}
問題は、std::queue と文字列を間違って使用していないかということです。
コードの他の部分には、次のようなものがあります。
string msg;
// processMessage -- some bit a of code with stripNull()
logQueue.push(msg);
processMessage で唯一面白いのは、次の関数です。
std::string Log::stripNull(const std::string &str, bool &gotNulls)
{
std::string retStr = str;
// strip any trailing NULLs
size_t rsltPos = retStr.find_first_of('\0', 0);
if (rsltPos != string::npos)
{
gotNulls = true;
retStr.resize(rsltPos);
}
return(retStr);
}
マッドフラップが stripNull 関数について不平を言っている可能性はありますか?
ありがとう。