c语言中的动态分配函数

#include 
#include 
//动态分配函数
/*1.malloc函数
 * 头文件:#include 
 * void *malloc(unsigned int size);
 * 功能:在堆区开辟指定长度的空间
 * 参数:size:要开辟的空间的大小
 * 返回值:成功:开辟好的空间的首地址。 失败:NULL
 *2.free函数(释放内存函数)
 * 头文件:#include 
 * 函数定义:void free(void *ptr)
 * 功能:释放堆区的空间
 * 参数:开辟后使用完毕的堆区的空间的首地址
 * 返回值:无
 * 注意:
 * free函数只能释放堆区的空间,其他区域的空间无法使用free
 * free释放空间必须释放malloc或者calloc或者relloc的返回值对应的空间,不能说只释放一部分
 * 3.calloc函数
 * 头文件:#include 
 * 函数定义:void *calloc(size_t nmemb,size_t size);
 * 功能:申请指定大小的空间在堆区
 * 参数:nmemb:要申请的空间的块数
 * size:每块的字节数
 * 返回值:成功:申请空间的首地址。 失败:NULL
 * 例如:
 * char *p=(char *)calloc(3,100);
 * 在堆中申请了3块,每块的大小为100个字节,即300个字节的连续区域
 * 也可以写成:
 * char *str=(char *)malloc(300*sizeof (char));
 * 4.realloc函数(重新申请内存)
 * 头文件:#include 
 * 函数定义:void *realloc(void *s,unsigned int newsize);
 * 功能:在原本申请好的堆区空间的基础上,重新申请内存,新的空间大小为函数的第二个参数,
 *      如果原本申请好的空间的后面不足以增加指定的大小,系统会重新找一个足够大的位置
 *      开辟指定的空间,然后将原本空间中的数据拷贝过来,然后释放原本的空间,如果newsize
 *      比原先的内存校,则会释放原先内存的后面的存储空间只留前面的newsize个字节。
 * 参数:
 *      s:原本开辟好的空间的首地址
 *      newsize:重新开辟的空间的大小
 * 返回值:新申请的内存的地址
 * 例如:
 * char *p
 * p=(char *)malloc(100);
 * p=(char *)realloc(p,150);
 * 如果原本的一百个字节后面的空间中有五十个字节,则在原本的空间中加上五十个字节;
 * 如果没有,则将原本的一百的拷贝到有一百五十个字节的地方
 */
 
  
char *fun(){
//    堆开辟空间,手动申请手动释放,更加灵活
//    使用malloc函数的时候一般要进行强转
    char *str=(char *)malloc(100*sizeof (char));//(char *)表示强转成char类型
 
  
    str[0]='h';
    str[1]='e';
    str[2]='l';
    str[3]='l';
    str[4]='o';
    str[5]='\0';
 
  
    return str;
 
  
}
int main()
{
   char *p;
   p=fun();
   printf("p=%s\n",p);
   printf("fun=%s\n",fun());
 
  
//   使用free函数释放空间
   free(p);
//   防止野指针
   p= NULL;
 
  
    return 0;
}
 
 

你可能感兴趣的:(1024程序员节)