2013-04-15 66 views
0

我試圖從一個地方複製寬c字符串到另一個地方。我在Windows8 64位平臺上使用Visual Studio 2012 express。它工作得很好,除非我嘗試使用Windows7 x64在我的主計算機上運行應用程序。它立即崩潰。沒有異常錯誤,雖然它是一個混亂的崩潰,沒有可跟蹤的錯誤代碼。如果您需要更多關於崩潰本身的具體信息,我會盡力提供。當我評論出複製該程序的效果非常好。所以很明顯,問題在於函數本身。這裏是做所有的複製行:Win7上wmemcpy&wcscpy函數導致崩潰

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()); 
} 

^崩潰/工程對win8的

我的胡亂猜測是,新的編譯器使用wmemcpy的較新版本是行不通的Windows 7的?程序不應該只在它到達函數調用行時崩潰?

+2

怎麼是'm_lpszWideText '定義? – hmjd

+0

它是我自己的(文本組件)類的成員指針:'private:const wchar_t * m_lpszWideText;' – user1756573

+1

你如何爲它分配內存?爲什麼它需要修改時是'const'?爲什麼不使用'std :: wstring'? – hmjd

回答

0

速成與字符串複製算法通常有兩個來源:

  1. 您的來源是不是空終止 在你的例子不是這種情況,因爲你從wstringstream提取它:: c_str( )

  2. 您的目的地不夠大,無法處理源數據,所以寫出界限。 這可能是你崩潰的原因,手段,你這個 - > m_lpszWideText太小(請在它的聲明,如果它是動態分配的告訴我們,怎麼樣。)

+0

不可能,否則會在每個平臺上崩潰。它現在是'wchar_t WideText [150];'我最初通過wcscpy()給它賦值。它仍然在另一臺計算機上崩潰,並在win8上正常工作...... – user1756573

+0

我通過ChangeText函數爲它賦值100,爲此我粘貼了前一篇文章中的代碼。 – user1756573

+0

也許Win8擁有比Win7更多的內存管理,這意味着你可以寫出你的內存,而不寫入保護區域,而在Win7中,你寫出了該區域。這可能是一個64/32位的問題?檢查要複製的字符串的大小,如果它適合? – EGOrecords