- #define _CRT_SECURE_NO_WARNINGS#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct _Teacher{ char*name; char**student; //创建学生数组}Teacher;void allocateTeacherSpace(Teacher***tArr,int num){ Teacher**TeacherArr = malloc(sizeof(Teacher*)*num);//创建num个Teacher* for (int i = 0; i < num;i++) { //给每个Teacher*开发空间 TeacherArr[i] = malloc(sizeof(Teacher)); //给每个Teacher成员开发空间 TeacherArr[i]->name = malloc(128); TeacherArr[i]->student = malloc(sizeof(char*) * 5); for (int j = 0; j < 5; j++) { TeacherArr[i]->student[j] = malloc(128); } } *tArr = TeacherArr;}void nameTeacher(Teacher**tArr,int num){ for (int i = 0 ; i < num; i++) { char buf[128] = { 0 }; sprintf(buf, "Teacher_%d", i + 1); strcpy(tArr[i]->name, buf); for (int j = 0; j < 5; j++) { sprintf(buf, "T_%d_S_%d", i + 1, j + 1); strcpy(tArr[i]->student[j], buf); } }}void printMsg(Teacher**tArr, int num){ for (int i = 0; i < num;i++) { printf("%s\n", tArr[i]->name); for (int j = 0; j < 5; j++) { printf("%s\t\t", tArr[i]->student[j]); } printf("\n\n"); }}void freeMem(Teacher***tArr,int num){ Teacher**pTeacher = *tArr; if (pTeacher==NULL) { return; } for (int i = 0; i < num; i++) { for (int j = 0; j < 5; j++) { free(pTeacher[i]->student[j]); pTeacher[i]->student[j] = NULL; printf("释放T%d的学生S%d的内存\n", i + 1, j + 1); } free(pTeacher[i]->name); pTeacher[i]->name = NULL; printf("释放T%d的name内存\n", i + 1); free(pTeacher[i]->student); pTeacher[i]->student = NULL; printf("释放T%d的student内存\n", i + 1); free(pTeacher[i]); pTeacher[i] = NULL; printf("释放T%d的内存\n", i + 1); } free(pTeacher); printf("释放Teacher的内存\n"); *tArr = NULL;}void test11(){ //堆区创建Teacher数组 Teacher**tArr = NULL; int tNum = 9; allocateTeacherSpace(&tArr, tNum); //给Teacher数组赋值 nameTeacher(tArr, tNum); printMsg(tArr, tNum); freeMem(&tArr, tNum);}int main(){ test11(); system("pause"); return 0;}
复制代码 来源:https://blog.csdn.net/GodCaptain/article/details/112021969
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |