2013-11-09 32 views
0

我有這樣一段代碼:的Xerces-C:了XmlString ::轉碼拼圖

void startElement(const XMLCh* const uri, const XMLCh* const localname, 
    const XMLCh* const qname, const Attributes& attrs) { 
    char* temp = XMLString::transcode(localname); 
    if (strcmp(temp, "thread") == 0) { 
     char* threadID = XMLString::transcode(
      attrs.getValue(emptyStr, tidStr)); 
     long int tid = strtol(threadID, &threadID, 16); //hex 
     if (tid != current) { 
      current = tid; 
      cout << "Now made " << ++switches 
       << " thread switches and in thread "; 
      cout << current; 
      if (!(threadbitmap & 1 << tid - 1)) { 
       count++; 
       threadbitmap = threadbitmap | 
        1 << tid - 1; 
      } 
      cout << " of " << count << " threads." << endl; 
     } 
     //XMLString::release(&threadID); 
    } 
    XMLString::release(&temp); 
} 

是我百思不得其解的事情是註釋掉線程ID發佈的需要 - 如果我不代碼立即對錯誤指針進行seg錯誤刪除。但是,由於threadID是XMLString :: transcode的結果,它當然應該被釋放?

回答

0

的問題是線 -

long int tid = strtol(threadID, &threadID, 16); //hex 

哪些更新的threadID

的價值。因此,當試圖delete它發生,這是一個錯誤的指針(即它不再指着在堆上的正確位置)。

long int tid = strtol(threadID, NULL, 16); //hex 

解決了問題。 (感謝Alberto Massari的答案)。