代码之家  ›  专栏  ›  技术社区  ›  Canacourse

如何追查变数腐败

  •  0
  • Canacourse  · 技术社区  · 16 年前

    // Datafile.h
    class CDataFile : public CStdioFile
    {
     public:
     CDataFile(void);
     ~CDataFile(void);
    
     int OpenFile(LPCWSTR FileName);
    }
    

    调用OpenFile函数后,FileName变量已损坏。

    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");
    

    在打开文件之前,变量文件名保持不变。我以前在MFC/Winapi中见过这种行为,并且总是通过使用字符数组而不是LPCWSTR或CString来解决它。为什么会这样?使用VS调试器跟踪此类问题的最佳方法是什么。损坏似乎发生在MFC文件中文件核心.cpp

    if (!CFile::Open(lpszFileName, (nOpenFlags & ~typeText), pException))
      return FALSE;
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Stephen Nutt    16 年前

    看看使用 data breakpoint

    推荐文章