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;
}