今天调试一段代码,这段程序之前可以运行,但是在我加入一些新的内容以后,再运行就出问题了,出现
First-chance exception in HttpAndFtpTest.exe (KERNEL32.DLL): 0xC0000005: Access Violation
的警告,后来跟踪进去,发现在
CONST TCHAR *szAcceptType=__HTTP_ACCEPT_TYPE;
_hHTTPRequest=::HttpOpenRequest( _hHTTPConnection, __HTTP_VERB_GET, // HTTP Verb szURI, // Object Name HTTP_VERSION, // Version NULL, // Reference &szAcceptType, // Accept Type INTERNET_FLAG_KEEP_CONNECTION | NTERNET_FLAG_NO_CACHE_WRITE, 0); // context call-back point
这段出了问题,搜了下网上,刚好有个人总结了该函数的问题,出现这个问题的原因是因为强制把szAcceptType这个1维数组变成2维数组,它的第二个数组没有'\0'结尾所导致的访问冲突。
我将第一句改成
CONST TCHAR *szAcceptType[2]={__HTTP_ACCEPT_TYPE,NULL};
就可以了。
总结:
1、在别的程序可以正确运行的程序,不一定是正确的,可能因为某些原因,刚好可以错误运行。不能因为这段程序在别的环境可以运行就以为一定正确。
2、这个函数的原型是:
HINTERNET WINAPI HttpOpenRequest( HINTERNET hConnect, LPCTSTR lpszVerb, LPCTSTR lpszObjectName, LPCTSTR lpszVersion, LPCTSTR lpszReferrer, LPCTSTR* lplpszAcceptTypes, DWORD dwFlags, DWORD dwContext );
其中 LPCTSTR* lplpszAcceptTypes, lplpsz表示其是二维的文本指针,既然如此,那么就要注意各个文本的结束符问题,这个是最重要的,以后在看msdn的函数时,一定要注意相关的问题。
转载于:https://www.cnblogs.com/Salior/archive/2012/11/08/2759876.html