wmemcpy& wcscpy函数导致崩溃

时间:2013-04-15 14:37:39

标签: c++ winapi memory copy cstring

我正在尝试将一个宽的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上运行?程序不应该只在它到达函数调用行时崩溃吗?

1 个答案:

答案 0 :(得分:0)

使用String-Copy算法的崩溃通常有两个来源:

  1. 您的Source未终止NULL 在您的示例中,情况并非如此,因为您从wstringstream :: c_str()

  2. 中提取它
  3. 您的目标数量不足以处理源数据,因此写出了Bounds。 这可能是导致崩溃的原因,意思是,你的这个&gt; m_lpszWideText太小了(请给出声明,如果它是动态分配的,请告诉我们,如何。)