-->

Unhandled Exception Error [closed]

2019-04-14 19:01发布

问题:

I am experiencing an unhandled exception within xutility

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

I do not have control over xutility. This unhandled exception train stems from

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

}

Normally, the return would proceed to

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

And subsequently back to the original call

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

What am I doing wrong?

回答1:

The data string is empty when you try to read into it. That will corrupt memory somewhere.

You should add data.resize(sizeOfData) to allocate space, and then read into its buffer

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

not into the string object itself.