关于free指针时出错

1607阅读 0评论2012-07-15 sdmariner
分类:C/C++

先上一个简单的例子

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.     int *ptr = (int *) malloc(sizeof(int));//注意申请的空间
  6.     for (int i = 0;i < 10; i++)
  7.         *(ptr + i) = i;
  8.     for (i = 0; i < 10; i++)
  9.         printf("%d\n",*(ptr + i));
  10.     free(ptr);
  11.     ptr1 = NULL;
  12.     return 0;
  13. }
这个例子可能太明显很容易发现问题所在。在写代码的过程中如果不注意,比如说没有写free语句,那么程序可以正常运行,不提示错误。但是加了free语句就会出错,因为使用的空间超过了申请时所注明的空间。

在程序中不像上面代码这么明显的例子很多,且容易疏忽。最近写的一段代码中,gzip解码函数中有一个指向动态申请空间的指针参数。
gz_decompress(gz_data, gz_len, result + 10, &data_size),data_size于result的空间大小一样,但由于写入结果时将result指针后移了10个字节,所以这个地方有可能超出申请的空间大小。程序最后free(result)时就会报错。

上一篇:Windows下两种使用zlib库的方法
下一篇:代码中<>替换为""和清理脚本