再谈“0xC0000005读取写入位置冲突”——正确使用指针访问内存
在前面一篇文章中,总结了错误使用指针指向一个字符串常量,然后对该字符串常量进行写入操作导致出错:“未经处理的异常:0xC0000005: 读取/写入位置发生访问冲突”。
这篇文章继续使用指针来探索这个问题。
在前面一篇文章中,总结了错误使用指针指向一个字符串常量,然后对该字符串常量进行写入操作导致出错:“未经处理的异常:0xC0000005: 读取/写入位置发生访问冲突”。
这篇文章继续使用指针来探索这个问题。
在c/c++中,有时会遇到0xC0000005: 读取/写入位置冲突的问题。明明编译器编译通过,但是在执行的时候就出现Segmentation fault(coredump)
了。
该错误是由于内存访问出错引起的,最常见于指针的错误使用和数组越界等。下面是博主之前的一个经历——去掉一个字符串前后的所有空格。
由于博客刚从wordpress转到typecho,所以对之前的数据库需要处理。在wordpress数据库中,文章和评论的时间记录形式和typecho不同:wordpress中登记的是北京时间,形如 2014-08-19 21:05:27;而typecho数据库中登记的是时间戳Unix timestamp,形如1408456593(对应标准北京时间是 2014/8/19 21:56:33 )。
于是,我在typecho中用date('Y-m-d H:i', $older_date)
函数把从数据库读取出来的Unix timestamp格式的$older_date
转换成形如 2014-08-19 21:05 的北京时间后,发现比当前的北京时间少了8个小时。GG一番,原来是时区导致的:格林威治时间与中国东八区本地时间相差8个时差。解决方法如下:
在由 WordPress 转向 Typecho 的过程中,主要难点是将 WordPress 中的文章和评论数据用 wordpress to typecho 插件剥离出来。经整理后再重新将文章转换为 markdown 格式发布到由ty搭建的本博客上,最后把评论导入到对应的文章下面,并对评论id重新排序。
通过插件把wordpress中文章和评论的数据转换成 typecho 形式的文章和评论数据,并导出为.sql备份文件。由于评论数据有1521条,对其id重新排序比较困难,所以博主将它们分拆为两个 .sql 文件(其中一个是utf-8格式的resultsql1.sql,另一个是gbk格式的resultsql2.sql)。
在Windows中安装 typecho 比较简单,只要先创建了数据库,然后安装过程和wordpress也类似。但是之前博主在自己的阿里云CentOS 6.5系统中安装 typecho,却出现了问题。
先用 mysql 的一个用户创建了一个数据库,然后进入typecho的安装页面,填写好相关信息。typecho 会自动检测输入的数据库信息是否正确。如果正确,那么就会出现下图的页面。因为博客的根目录权限是不可写的,所以typecho程序无法自动生成配置文件 config.inc.php 。于是把里面的代码复制出来,并在根目录下新建文件 config.inc.php ,然后把复制的代码粘贴进去。结果在点击“创建完毕,继续安装”后,安装页面就跳转到空白页面了。
由于之前对 iptables 不熟悉,所以在配置 iptables 的时候,直接执行命令iptables -F
。结果导致 Securecrt 中所有连接远端服务器的窗口都断掉了,而且博客的所有页面都无法打开。心中顿时一慌,ssh无法登录,即使博客中的程序和数据库已经备份了也无法取出了。
网上搜了一下,原来在使用这个命令之前一定要先执行命令iptables -P INPUT ACCEPT
。