谁能解释下malloc在c语言中的用法?

程序语句:int *a;
a=(int *)malloc(sizeof(int));
不明白malloc在其中的用法
请你帮忙解释下。越详细越好。谢谢噢。

malloc申请的空间是在"堆"上的

平时我们都是用声明变量来申请空间的,此时申请到的空间是"栈"上的

栈上的空间, 不需要程序员负责释放.
例如,在以下函数中
int go() {
int a;
int b[50];
}
在运行到go里面时, 申请了4个字节(int类型是4个字节)的空间来放变量a, 4*50=200个字节的空间来放变量数组b

在调用go时
// ...
go();
// ...

在运行到go()函数的里部,会申请相应的空间,但在退出go()以后,这些空间就会被废弃.

这在有些时候不能够满足我们的需求,因而就要用到malloc和free
malloc申请的空间,要由我们程序员来负责释放

int go() {
int* a;
a = malloc(sizeof(int));
}
这样就在堆上申请到了4个字节的空间了(sizeof(int)能够得到int的大小, 返回4).

我们还可以
int* a;
a = malloc(100 * sizeof(int))
来申请到100个int的空间.

退出go以后,空间不会释放.所以要用free来释放.
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-03

  在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。

  原型:extern void *malloc(unsigned int num_bytes);

  功能:分配长度为num_bytes字节的内存块。注意是分配的内存是按字节来计算的。

  返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。示例如下,注意看注释:

    #include<stdio.h>
  //使用malloc需要加stdlib.h的头文件
  #include <stdlib.h>
  #include <string.h>
  int main()
  {
  //分配内存10个int元素的数组,注意按字节分配,所以要乘以int类型所占的字节
  int *p = (int *)malloc(sizeof(int) * 10);
  if (p==0) {
  printf("不能分配内存\n");
  return 0;
  }
  //初始化内存
  memset(p, 0x00, sizeof(int) * 10);
  int inx;
  //使用
  for (inx=0; inx!=10; ++inx) p[inx] = inx;
  for (inx=0; inx!=10; ++inx) printf("%d\t", p[inx]);
  printf("\n");
  //释放
  free(p);
  return ;
  }

第2个回答  2009-03-21
这种问题网路上已经有很多资源可以查了说
ex:

http://www.bccn.net/Article/kfyy/cyy/jszl/200608/4238.html
相似回答