问题一:简单申请结构体动态内存,对结构体中变量进行赋值;
实验代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct afuc
{
char *name;
char *banji;
int age;
int id;
};
int main(int argc, char *argv[]) {
struct afuc *a;
a=(struct afuc *)malloc(sizeof(struct afuc));
if(a!=NULL){
printf("动态内存申请成功;\n");
memset(a,0,sizeof(struct afuc));
a->name=(char *)malloc(sizeof(char)*N);
a->banji=(char *)malloc(sizeof(char)*N);
if((a->name!=NULL)&&(a->banji!=NULL)){
printf("结构体中的两个char型的动态内存申请成功;\n");
memset(a->name,'\0',sizeof(char)*N);
memset(a->banji,'\0',sizeof(char)*N);
printf("学生姓名:");
scanf("%s",a->name);
printf("学生班级:");
scanf("%s",a->banji);
}
printf("年龄:");
scanf("%d",&a->age);
printf("学号:");
scanf("%d",&a->id);
}
free(a->name);
a->name=NULL;
free(a->banji);
a->banji=NULL;
free(a);
a=NULL;
return 0;
}
运行结果:
这段代码申请了三个malloc函数。结构体变量是在堆上分配的,结构体的变量name与banji也分别指向堆区上的一个地址。其中指针a分配在栈上,其余三段内存都分配在堆上,都需要显示释放,所以用到了3个free函数,而且还需要先释放name与banji指向的空间。