我有一段代码:
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);
} 令我困惑的是,需要注释掉threadID的发布--如果我不这样做的话,代码就会在删除错误指针时立即安装错误。但是,由于threadID是XMLString::transcode的结果,所以它肯定应该发布吗?
发布于 2013-11-10 20:52:32
问题是这条线-
long int tid = strtol(threadID, &threadID, 16); //hex更新threadID的值。
因此,当尝试delete时,它是一个糟糕的指针(即它不再指向堆上正确的位置)。
long int tid = strtol(threadID, NULL, 16); //hex解决问题。(感谢阿尔贝托·马萨里的回答)。
https://stackoverflow.com/questions/19879625
复制相似问题