先上一个简单的例子
点击(此处)折叠或打开
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- int *ptr = (int *) malloc(sizeof(int));//注意申请的空间
- for (int i = 0;i < 10; i++)
- *(ptr + i) = i;
- for (i = 0; i < 10; i++)
- printf("%d\n",*(ptr + i));
- free(ptr);
- ptr1 = NULL;
- return 0;
- }
在程序中不像上面代码这么明显的例子很多,且容易疏忽。最近写的一段代码中,gzip解码函数中有一个指向动态申请空间的指针参数。
gz_decompress(gz_data, gz_len, result + 10, &data_size),data_size于result的空间大小一样,但由于写入结果时将result指针后移了10个字节,所以这个地方有可能超出申请的空间大小。程序最后free(result)时就会报错。