Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104086
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 402
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-22 11:09
个人简介

摸着石头过河

文章分类

全部博文(30)

文章存档

2015年(2)

2014年(28)

我的朋友

分类: C/C++

2014-12-11 17:14:47

一、数组越界
      编程时曾经遇到过这样一个问题,当时是定义一个一维数组,在接下来的编程中把数组的大小给忘了,导致写数据超过数组的定义大小,结果在代码的另一个地方调用free()时出错了,当时整个代码中只有一处调用了free,所以不存在重复调用也确定不是free了一个NULL,在网上查了下可能释放了不是当初malloc分配的地址,但是传给free的变量就是之前malloc分配的,然后调试结果发现在free之前有个变量的内容被改变了,当时就更奇怪了,后来偶尔发现数组超过界限这个问题,于是就修改过来,果然问题全部解决了。
       个人猜测:超过数组界限写数据覆盖了某些内存地址的内容,而这个地址的内存恰好就是我之前用来存储其他变量内容的,所以变量内容被篡改。至于free报错个猜测传给free的变量名对应的地址被修改了,但是感觉好像也不大可能。总之,超过数组界限会给程序带来意想不到的错误,引以为戒!
二、strtok
      程序中外循环调用strtok,内部循环多次调用strtok,结果发现外循环strtok操作的内存中数据内容被改变了。其实,是因为多次调用strtok导致内部指针被改变了,表象是外循环中操作的内容被改变从而引起程序错误。
阅读(741) | 评论(0) | 转发(0) |
0

上一篇:概率论基础知识

下一篇:sql语句学习笔记

给主人留下些什么吧!~~