我正在创建ioStream,然后使用dll中重载的运算符:

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


aString是作为参数接收的const char *。
第二行导致此运行时错误:


  0xC0000005:访问冲突读取位置0x00000020


但是,当我用运算符重载函数的实际代码替换第二行时,没有任何错误。

请注意,我正在Visual Studio 2010中构建它,并且使用Visual Studio 2005编译时,相同的代码运行没有错误。

最佳答案

没有上下文很难讲述aString的设置方式,但是istrstream是已弃用的类。您是否考虑过尝试使用istringstream来缩小范围?

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


编辑:经过进一步考虑,这看起来很可疑,您的aString实际上为空,并且随着strstream尝试从中读取,最终它死于访问冲突。尝试在执行字符串流操作之前打印出aString的原始指针值(类似于std::cout << static_cast<void*>(aString) << std::endl;

关于c++ - ioStream访问冲突错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4995079/

10-11 17:55