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);
}

Меня озадачивает необходимость закомментировать выпуск threadID — если я не сделаю этого, код сразу вызовет ошибки при удалении неверного указателя. Но так как threadID является результатом XMLString :: transcode, он обязательно должен быть освобожден?

0

Решение

Проблема в линии —

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

Который обновляет значение threadID

Таким образом, когда попытка delete это имеет место, это плохой указатель (то есть он больше не указывает на нужное место в куче).

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

Исправляет проблему. (Спасибо Альберто Массари за ответ).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]