Ошибка нарушения доступа с ioStream - PullRequest
0 голосов
/ 14 февраля 2011

Я создаю ioStream, а затем использую оператор, перегруженный в dll:

  std::istrstream wStream((char *)aString,strlen(aString));
  wStream >> wValue;

aString - это const char *, полученный в качестве параметра.Вторая строка вызывает эту ошибку времени выполнения:

0xC0000005: Место чтения нарушения прав доступа 0x00000020

Однако, когда я заменяю вторую строку фактическим кодом функции перегрузки оператора, Я не получаю ошибки.

Обратите внимание, что я создаю это в Visual Studio 2010, и тот же код выполняется без ошибок при компиляции с Visual Studio 2005.

1 Ответ

1 голос
/ 14 февраля 2011

Трудно сказать без контекста о том, как установлен aString, но istrstream является устаревшим классом.Рассматривали ли вы попытку istringstream вместо теста, чтобы помочь сузить положение?

std::istringstream wStream(std::string(aString));
wStream >> wValue;

РЕДАКТИРОВАТЬ: при дальнейшем рассмотрении это выглядит подозрительно, как будто ваш aString фактически равен нулю, а strstream пытаетсячитать с него, в конце концов он умирает от нарушения прав доступа.Попробуйте распечатать необработанное значение указателя aString перед выполнением операций с потоком строк (что-то вроде std::cout << static_cast<void*>(aString) << std::endl;)

...