VS2010 CString 提示无效指针有关问题
VS2010 CString 提示无效指针问题
CTestApp
{
成员拉变量声明:
CString m_strPath;
}
//读取系统的配置文件,声音文件的路径
CTestApp::ReadConfig()
{
char lpszPathName[MAX_PATH];
memset(lpszPathName, 0x0, sizeof(lpszPathName));
::GetModuleFileNameA(::AfxGetInstanceHandle(), lpszPathName, MAX_PATH);
m_strPath=lpszPathName; //提示 m_strPath 无效指针
}
如何解决? 代码从Vc6移植过来的
------解决方案--------------------
是否Unicode?
把编译器的保存发出来,肯定不是“m_strPath 无效指针”,是不是无法赋值之类的
不能memset &m_strPath (和你贴的代码无关)
------解决方案--------------------
可能是因为路径中文,你把路径换成英文试试。
------解决方案--------------------
楼主测试下直接给m_strPath赋值行不行?这句应该没有错啊
------解决方案--------------------
楼主请排查我说的一种情况,
查查你的程序的其他地方,有没有可能产生内存越界的问题
就是说访问的内存地址,超过你的变量分配的内存地址
------解决方案--------------------
在调用GetModuleFileNameA之前,m_strPath是有效的吗?如果是有效就是GetModuleFileNameA的参数问题,或者应该用GetModuleFileNameW,Unicode版本
------解决方案--------------------
m_strPath=CString(lpszPathName);
------解决方案--------------------
------解决方案--------------------
嗯,楼上朋友说的有道理!!!
------解决方案--------------------
Release 下编译器优化了的
变量一般看不到,除非你在选项关掉优化选项
------解决方案--------------------
看来一开始就理解错了,还以为是程序运行错误呢...
如20楼所说,Release是编译器优化的。
要想如debug一样调试,需要改很多工程设置,关优化,加调试信息等。这样其实没有没有调试的意义了。
如果只加调试信息,断点很难设置,变量也很难找到。
可参考
http://www.cnblogs.com/fishtreeyu/archive/2011/11/27/2265023.html
CTestApp
{
成员拉变量声明:
CString m_strPath;
}
//读取系统的配置文件,声音文件的路径
CTestApp::ReadConfig()
{
char lpszPathName[MAX_PATH];
memset(lpszPathName, 0x0, sizeof(lpszPathName));
::GetModuleFileNameA(::AfxGetInstanceHandle(), lpszPathName, MAX_PATH);
m_strPath=lpszPathName; //提示 m_strPath 无效指针
}
如何解决? 代码从Vc6移植过来的
------解决方案--------------------
是否Unicode?
把编译器的保存发出来,肯定不是“m_strPath 无效指针”,是不是无法赋值之类的
不能memset &m_strPath (和你贴的代码无关)
------解决方案--------------------
可能是因为路径中文,你把路径换成英文试试。
------解决方案--------------------
楼主测试下直接给m_strPath赋值行不行?这句应该没有错啊
------解决方案--------------------
楼主请排查我说的一种情况,
查查你的程序的其他地方,有没有可能产生内存越界的问题
就是说访问的内存地址,超过你的变量分配的内存地址
------解决方案--------------------
在调用GetModuleFileNameA之前,m_strPath是有效的吗?如果是有效就是GetModuleFileNameA的参数问题,或者应该用GetModuleFileNameW,Unicode版本
------解决方案--------------------
m_strPath=CString(lpszPathName);
------解决方案--------------------
------解决方案--------------------
嗯,楼上朋友说的有道理!!!
------解决方案--------------------
Release 下编译器优化了的
变量一般看不到,除非你在选项关掉优化选项
------解决方案--------------------
看来一开始就理解错了,还以为是程序运行错误呢...
如20楼所说,Release是编译器优化的。
要想如debug一样调试,需要改很多工程设置,关优化,加调试信息等。这样其实没有没有调试的意义了。
如果只加调试信息,断点很难设置,变量也很难找到。
可参考
http://www.cnblogs.com/fishtreeyu/archive/2011/11/27/2265023.html