请问一个有关问题

请教一个问题?
#include   "stdio.h "
int   a[3][3]={1,2,3,4,5,6,7,8,9},*p;
void   main()
{p=(int   *)malloc(sizeof(int));
    f(p,a);
    printf( "%d\n ",*p)
  }
f(int   *s,int   p[   ][3])
{   *s=p[1][1];}

请问:题中的第三句语句,即:p=(int   *)malloc(sizeof(int));
            这句语句表示什么意思?如果没这句语句会怎么样?一般什么时候要用到       这个语句的?谢谢回答~~~~

------解决方案--------------------
这就是在堆中分配sizeof(int)大小的内存,并使p指向这块内存。
相当于c++中的int *p = new int;
------解决方案--------------------
当你需要向系统要一块内存时使用它。就好像向银行贷款一样,是要还滴:
free(p);
------解决方案--------------------
这个程序不会有什么问题,因为马上就结束了,系统会自动追回你欠的内存的。如果你的程序是连续工作的,而且经常每次都欠这么一下,虽然欠的不多,但积累起来,系统的内存很快就会被你借光了,系统就要跟硬盘借了,你的硬盘就开始不停的嘎吱嘎吱响……连硬盘都借光了的话,你就该按Reset键了吧。
------解决方案--------------------
建议你看看高质量C\C++编程,在使用指针前必须为其分配内存,否则将会产生野指针