首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xerces-c: XMLString::transcode益智

Xerces-c: XMLString::transcode益智
EN

Stack Overflow用户
提问于 2013-11-09 17:07:49
回答 1查看 620关注 0票数 0

我有一段代码:

代码语言:javascript
复制
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的结果,所以它肯定应该发布吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-10 20:52:32

问题是这条线-

代码语言:javascript
复制
   long int tid = strtol(threadID, &threadID, 16); //hex

更新threadID的值。

因此,当尝试delete时,它是一个糟糕的指针(即它不再指向堆上正确的位置)。

代码语言:javascript
复制
   long int tid = strtol(threadID, NULL, 16); //hex

解决问题。(感谢阿尔贝托·马萨里的回答)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19879625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档