面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 分配内存的函数
struct Main* createMain() {
struct Main* mainPtr = (struct Main*)malloc(sizeof(struct Main));
if (mainPtr == NULL) {
return NULL;
}
mainPtr->sub1.arr = (int*)malloc(5 * sizeof(int));
if (mainPtr->sub1.arr == NULL) {
free(mainPtr);
return NULL;
}
for (int i = 0; i < 5; i++) {
mainPtr->sub1.arr[i] = i + 1;
}
mainPtr->sub1.size = 5;
mainPtr->sub2.arr = (int*)malloc(3 * sizeof(int));
if (mainPtr->sub2.arr == NULL) {
free(mainPtr->sub1.arr);
free(mainPtr);
return NULL;
}
for (int i = 0; i < 3; i++) {
mainPtr->sub2.arr[i] = i + 3;
}
mainPtr->sub2.size = 3;
mainPtr->name = (char*)malloc((strlen("example") + 1) * sizeof(char));
if (mainPtr->name == NULL) {
free(mainPtr->sub1.arr);
free(mainPtr->sub2.arr);
free(mainPtr);
return NULL;
}
strcpy(mainPtr->name, "example");
return mainPtr;
}
// 释放内存的函数
void freeMain(struct Main* mainPtr) {
if (mainPtr != NULL) {
if (mainPtr->sub1.arr != NULL) {
free(mainPtr->sub1.arr);
}
if (mainPtr->sub2.arr != NULL) {
free(mainPtr->sub2.arr);
}
if (mainPtr->name != NULL) {
free(mainPtr->name);
}
free(mainPtr);
}
}
你可以这样调用这些函数:
int main() {
struct Main* mainObj = createMain();
if (mainObj != NULL) {
// 使用mainObj
freeMain(mainObj);
}
return 0;
}