c语言动态内存分配有什么用