php“内存位置访问无效”错误的解决办法
配置环境如下:
Win2003SP2+IIS6+php5.26+mysql5.0.51a+zend3.3a+PhpMyAdmin2.11.7.1 PHP执行方式:isapi。Mysql为手动安装。
关于“内存位置访问无效”的错误解决办法与步骤:(一些部份无效的调试步骤略过..)
一、将IIS的错误显示打开,未发现错误原因!
二、检查IIS扩展,ISAPI、php.ini与Mysql配置以及相应的安装目录ACLs权限,均无误。
三、回收IIS进程,错误仍然出现”内存位置访问无效”….
四、将php.ini中 display_startup_errors = On 打开,问题所在终于发现了… (注:如果将php.ini的display_startup_errors打开,如果php有错误出理,就会提示,而且在事件查看器中有记录。如果设置为display_startup_errors = Off,则不会有任何提示)
五、Warning
Cannot load module ‘SQLite’ because required module ‘pdo’ is no loaded
上面这条错误信息终于被发现了。大概意思就是因为php.ini配置中开启了SQLite桌面数据库的支持,但未开启相关的pdo模式,pdo模块加载失败…..
六、解决办法也很简单了,因为加载php_sqlite.dll时未加载到php_pdo.dll文件,所以运行phpinfo()函数时提示内存 位置访问无效。找到php.ini配置文件,然后去掉”;extension=php_pdo.dll”前面的分号, extension=php_sqlite.dll
然后再回收一下IIS应用程序池进程,问题彻底解决….---------------------------------------------------------------------
造成内存位置访问无效的一个原因
今天编一个程序,release版编译链接均成功,运行时出错,使用GetLastError获取错误,错误信息为内存位置访问无效。经过上网搜索及自己分析,发现是release版链接了debug版本的第三方库造成的。一般来说,debug版程序链接release版库没有问题,但是release版链接了debug版本的会有问题,而且问题隐蔽,错误难以查找。debug版和release版具体区别可以看这篇文章:关于Debug和Release之本质区别的讨论。