c语言学习动态内存管理

库函数:

malloc库函数   作用:内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址

eg:malloc(123);//开辟123个字节的临时分配域, 返回值是第一个字节的地址    若失败  返回  空(NULL或者0)。

需要定义一个指针定义指向动态内存分配的地址。

 eg  int *p=malloc(sizeof(int));  //用指针指向一个分配4字节的动态内存地址

 free库函数  

声明:void free(void *p)无返回值

其作用是释放指针 p 所指向的动态空间的地址。p 是调用 malloc 函数时的返回的地址。free函数无返回值。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main ()
{
   int *p=0;
   p=malloc(sizeof(int));  //申请内存   包含在<stdlib.h>中  当系统内存被耗尽时  会失败

   printf("%p\n",p);      //打印出地址

   *p=123;              //存放值是123

   printf("%d\n",*p);     //打印出p的值

   free(p);           //使用完后释放
}

运行结果: 

0x19c3010
123

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 struct st_girl //女朋友结构体
 {
   char name[50];    //定义姓名
   int age;          //定义年龄
 };

int main (int argc,char *argv[])
 {
  int    *pi=malloc(sizeof(int));     //分配int类型大小的内存
  long   *pl=malloc(sizeof(long));    //分配long类型大小的内存
  double *pd=malloc(sizeof(double));  //分配double类型大小的内存
  char   *pc=malloc(sizeof(101));      //分配101字节的内存,可存放100个字符的字符串 

  //分配struct st_girl结构体大小的内存 
  struct st_girl *pst=malloc(sizeof(struct st_girl));

   //像普通指针和变量一样使用动态分配的内存

   *pi=10;    printf("*pi=%d\n",*pi);
   *pl=20;    printf("*pl=%d\n",*pl);
   *pd=10.5;  printf("*pd=%.lf\n",*pd);
   strcpy(pc,"西施");    printf("*pc=%s\n",pc);    //赋值
   strcpy(pst->name,"王昭君");pst->age=21;       //  用指针直接找到结构体中的变量 
   printf("name=%s,age=%d\n",pst->name,pst->age);

   //及时释放动态分配的内存
   free(pi);free(pl);free(pd);free(pc);free(pst);
}
*pi=10
*pl=20
*pd=10
*pc=西施
name=王昭君,age=21

使用动态分配内存技术的时候,分配出来的内存必须及时释放,否则会引起系统内存耗尽

指针变量在创建时一定要初始化   否则会乱指

int *p=0;

或者   int ii; int *p=&ii

使用free函数释放掉指针内存时  一定要把指针指向0

int*p=0;

free(p);  //

p=0;

总结:有分配就有释放  c++中的容器代替了c中的链表。并且比链表好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值