malloc函数的详解及用法

malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域,开辟一个内存空间来使用;适用于我们事先不知道需要多大空间的情况。使用malloc函数时需要包含stdlib.h头文件。

malloc的原型函数

void * malloc(unsigned int num_byte)

malloc的调用格式

(指针类型*)malloc(sizeof(指针类型))

malloc函数说明

malloc动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址;如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。

在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配。

free函数说明

free函数释放malloc函数给指针变量分配的内存空间;使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。

1.使用malloc申请内存空间

例如:

#include<stdlib.h>

int main(){

int *pr = NULL;
int n = 100;
pr = (int *)malloc(sizeof(int)*n);
free(pr);
pr=NULL;
return 0;

}

2.为结构体变量申请内存空间

例如:

#include<stdlib.h>
#include<stdio.h>

typedef struct data_type

{

    int age;
    char name[30];

} data;


int main{

data *student = NULL;
student = (data *)malloc(sizeof(data));
if (student != NULL)
{

    student->age = 18;
    strcpy(student->name, "liming");
    printf("%sis%d years old\n", bob->name, bob->age);

}
else
{
    printf("malloc error!\n");
    exit(-1);
}
free(student);
student = NULL;
return 0;

}

3.从键盘输入若干个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,计算每个学生的总分

例如:

#include<stdio.h>
#include<stdlib.h>

typedef struct student
{

char num[60];
char name[30];
int score[3];

} strr;

strr student_puts(strr *pc)
{

scanf("%s",&pc->num );
scanf("%s",&pc->name );
int i=2;
while(i>=0)
{
scanf("%d",&pc->score[i]);
i--;
}
 return *pc;

}

int number(strr *pc)
{
  int numbers=0;
  int i=2;
  while(i>=0)
 {
 numbers+=pc->score[i];
 i--;
 }
 return numbers;
}

 int main()

 {

  int i,n;
  scanf("%d",&n);
  strr *students=(strr *)malloc(n*sizeof(strr));
  for(i=0;i<n;i++)
  {
  students[i]=student_puts(&students[i]);
  }
 for(i=0;i<n;i++)
 {
  printf("%d\n",number(&students[i]));
 }
  return 0;

 }

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值