2013-04-16 4 views
1

Я испытывает unhandled exception в xutilityНеизвестное исключение Error

if (_Myproxy != 0) 
    { // proxy allocated, drain it 
    _Lockit _Lock(_LOCK_DEBUG); 

    for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter; 
     *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter) 
     (*_Pnext)->_Myproxy = 0; <------- unhandled exception here 
    _Myproxy->_Myfirstiter = 0; 
} 

у меня нет контроля над xutility. Это unhandled exception поезд проистекает из

std::string BinarySearchFile::readT(long filePointerLocation, long sizeOfData) 
{ 
    try{ 
      if(binary_search_file){ 
       std::string data; 
       binary_search_file.seekp(filePointerLocation); 
       binary_search_file.seekg(filePointerLocation); 
       binary_search_file.read(reinterpret_cast<char *>(&data), sizeOfData); 

       return data; <------- branch into xutility and subsequent unhandled exception 

      }else if(binary_search_file.fail()){ 
       throw CustomException("Attempt to read attribute error"); 
      } 

    } 
    catch(CustomException &custom_exception){ // Using custom exception class 
      std::cout << custom_exception.what() << std::endl; 
    } 

} 

Обычно return приступит к

std::string BinarySearchFile::read_data(long filePointerLocation, long sizeOfData){ 
    return readT(filePointerLocation, sizeOfData); 
} 

И затем вернуться к первоначальному вызову

attributeValue = data_file->read_data(index, size); 

Что я делаю не так?

+1

«Необработанное исключение» - довольно безнадежная диагностика, вам нужно рассказать, что вы знаете об этом. Отладчик показывает вам сведения об исключении. В общем, избегайте думать, что это имеет какое-либо отношение к xutility, ваша программа, разлагающая кучу, является стандартным объяснением. –

+0

Из того, что я опубликовал (код) выше, как вы думаете, будет развращать кучу? Я просто читаю двоичные данные в 'std :: string' и возвращаю их обратно вызывающему. – Mushy

+0

Ты где-то искал память. Где ваш [тестовый файл] (http://sscce.org)? –

ответ

2

Строка data пуста, когда вы пытаетесь ее прочитать. Это где-то испортит память.

Вы должны добавить data.resize(sizeOfData) выделить пространство, а затем прочитать в буфере

binary_search_file.read(&data[0], sizeOfData); 
          ^^^ 

не в самой строки объекта.

+0

Правильно. OP обрабатывает 'data' как некоторую готовую коллекцию байтов, но это не так. Это сложный объект, который на самом деле происходит внутренне и косвенно «содержит» никаких байтов вообще. –

+0

Да, это работает, но не так, как предполагалось. Мне придется задать другой вопрос, связанный с тем, почему чтение двоичных данных неверно. Я написал в файл «packard (три конечных пробела)», используя 'binary_search_file.write (reinterpret_cast (& attribute), attribute.length() * 2);' но получил обратно через 'binary_search_file.read (& data [0], sizeOfData); 'XXX packard XXX', где X - нежелательные данные. – Mushy

Смежные вопросы