记得大学时候学过一段时间C,里面的代码并不需要malloc就可以运行,比如直接定义一个数组,一个int.
什么时候需要写这个函数?
在实际问题中,为了合理利用内存,你不能总是使用足够大的内存去保存数据(实际上当你的数组定义得太大,编译器会报错),此时就需要动态分配内存。例如你要定义一个数组,但数组长度不定,需要从键盘输入,就可以用malloc函数。
又比如,链表的插入,删除比数组快很多,你使用链表时插入一个节点,也可以用malloc函数为节点分配一个内存。当然你也可以使用静态链表,但它性能不及普通链表。
实际上,C语言中实现很多数据结构都需要用指针实现,而它们的数据存储通常与动态内存分配有关。
函数里直接定义数组,数组的内存分配在栈stack里面,函数返回数组内存就会被释放,malloc的内存分配在堆heap里面,函数返回后heap分配的内存不会自动释放,需要手工调用free。malloc分配内存开销比数组大,速度慢。
一般的,如果你的内存需要函数返回后还继续使用,必须用malloc。否则,可以用局部数组,这样效率高速度快而且还不用麻烦手工释放内存。