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