我正在创建一个ioStream,然后使用在dll中重载的运算符:
std::istrstream wStream((char *)aString,strlen(aString));
wStream >> wValue;
aString是作为参数接收的const char *。 第二行导致此运行时错误:
0xC0000005:访问冲突读取位置0x00000020
但是,当我用操作符重载函数的实际代码替换第二行时,我没有错误。
请注意,我在Visual Studio 2010中构建它,并且使用Visual Studio 2005编译时,相同的代码运行时没有错误。
答案 0 :(得分:1)
如果没有关于如何设置aString
但是istrstream
是不推荐的类的上下文,很难说清楚。您是否考虑过将istringstream
作为测试来帮助缩小范围?
std::istringstream wStream(std::string(aString));
wStream >> wValue;
编辑:经过进一步考虑,这看起来很可疑,因为aString
实际上是空的,并且当strstream
尝试从中读取时,最终它会因访问冲突而死亡。尝试在执行字符串流操作之前打印出aString
的原始指针值(类似std::cout << static_cast<void*>(aString) << std::endl;
)