我正在尝试将一个宽的C字符串从一个地方复制到另一个地方。我在Windows8 64位平台上使用Visual Studio 2012 Express。除非我尝试使用Windows7 x64在我的主计算机上运行应用程序,否则它的工作完全正常。它瞬间崩溃了。没有异常错误,虽然它是一个混乱的崩溃,没有任何可跟踪的错误代码。如果您需要有关崩溃本身的更多具体信息,我将尽力提供。当我评论复制时,程序工作得非常好。所以很明显问题在于函数本身。以下是执行所有复制的行:
virtual void CClass::ChangeText();
void CClass::ChangeText(float _f)
{
std::wstringstream wss;
wss << _f;
wcscpy(const_cast<wchar_t *>(this->m_lpszWideText),wss.str().c_str());
}
^在win7上崩溃/在win8上工作
我的猜测是,新的编译器使用了更新版本的wmemcpy,它只能在Windows 7上运行?程序不应该只在它到达函数调用行时崩溃吗?
答案 0 :(得分:0)
使用String-Copy算法的崩溃通常有两个来源:
您的Source未终止NULL 在您的示例中,情况并非如此,因为您从wstringstream :: c_str()
您的目标数量不足以处理源数据,因此写出了Bounds。 这可能是导致崩溃的原因,意思是,你的这个&gt; m_lpszWideText太小了(请给出声明,如果它是动态分配的,请告诉我们,如何。)