Visual studio 2008 如何追踪变量损坏

Visual studio 2008 如何追踪变量损坏,visual-studio-2008,winapi,mfc,corrupt,Visual Studio 2008,Winapi,Mfc,Corrupt,我有一个从CStdioFile派生的MFC类,声明如下 // Datafile.h class CDataFile : public CStdioFile { public: CDataFile(void); ~CDataFile(void); int OpenFile(LPCWSTR FileName); } 调用我的OpenFile函数后,文件名变量已损坏 int CDataFile::OpenFile(LPCWSTR FileName) { m_OpenFlags =

我有一个从CStdioFile派生的MFC类,声明如下

// Datafile.h
class CDataFile : public CStdioFile
{
 public:
 CDataFile(void);
 ~CDataFile(void);

 int OpenFile(LPCWSTR FileName);
}
调用我的OpenFile函数后,文件名变量已损坏

int CDataFile::OpenFile(LPCWSTR FileName)
    {

m_OpenFlags = CFile::modeNoTruncate | CFile::modeReadWrite;   

// Before open. FileName = "c:\afile.txt"

     if (!Open(FileName, m_OpenFlags, NULL)) 

         {
            return GetLastError();
         }

//After open. FileName = ""ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮވĚᗸ÷ᘸ÷㼠碞­"

// other stuff
}

}
但是如果我把文件名改成

WCHAR FileName[] = _T("c:\\afile.txt");
在打开文件之前,变量Filename保持不变。我以前在MFC/Winapi中见过这种行为,并且总是通过使用字符数组而不是LPCWSTR或CString来解决它。为什么会发生这种情况?使用VS调试器跟踪此类问题的最佳方法是什么。损坏似乎发生在MFC文件Filecore.cpp中

if (!CFile::Open(lpszFileName, (nOpenFlags & ~typeText), pException))
  return FALSE;
看看如何使用(也称为硬件断点)。修改内存时可以中断。

the()表示它需要LPCTSTR而不是LPCWSTR(普通字符vs宽字符串)。也许这就是问题所在?我不这么认为“typedef LPCWSTR LPCTSTR