C语言中malloc分配的内存块并不保证其初值为0

所要说的如同题目,这是比较坑的一个点,在调用代码的时候偶然遇到。

下面描述我是怎么遇到错误的
(原程序是为了解决:数据结构与算法分析——C语言描述第三章第九题而写的大数计算程序,但这里不贴出)

内存块分配函数:

C语言中malloc分配的内存块并不保证其初值为0
直接用malloc函数分配内存块。

主函数:

C语言中malloc分配的内存块并不保证其初值为0问题是怎么出现的:
Exp函数中会调用部分内存块且赋值,而这部分内存块由于Exp函数调用赋值之后值不为0,
它们被free之后值不会自动变为0,又可被malloc函数*分配,
使得上面的malloc函数分配了部分初值不为0的内存块。

我在CountDigits函数会输出一个可能出现问题的内存块(其实是自己写的结构体变量)

调用主程序后输出如下:

C语言中malloc分配的内存块并不保证其初值为0可以看到对应变量的内存块初值不为0,后来导致我的程序因不符合逻辑而进入无限循环。

对分配的内存块初始化赋以0后

C语言中malloc分配的内存块并不保证其初值为0(这里就是把那注释的两行重新启用)
以上,建议在分配内存块的时候要小心这个坑。