MST

星途 面试题库

面试题:C语言结构体嵌套动态内存分配的错误处理

定义一个结构体`Outer`,它包含一个`int`类型成员和一个指向另一个结构体`Inner`的指针,`Inner`结构体有两个`float`类型成员。编写代码为`Outer`结构体分配内存,并在`Outer`的`Inner`指针指向的内存也分配成功的情况下进行数据填充。若其中任何一步内存分配失败,写出完整的错误处理流程,释放已分配的内存并打印合适的错误信息。
12.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 定义Inner结构体
typedef struct Inner {
    float member1;
    float member2;
} Inner;

// 定义Outer结构体
typedef struct Outer {
    int outerMember;
    Inner *innerPtr;
} Outer;

int main() {
    Outer *outer = (Outer *)malloc(sizeof(Outer));
    if (outer == NULL) {
        fprintf(stderr, "Failed to allocate memory for Outer\n");
        return 1;
    }

    outer->innerPtr = (Inner *)malloc(sizeof(Inner));
    if (outer->innerPtr == NULL) {
        fprintf(stderr, "Failed to allocate memory for Inner\n");
        free(outer);
        return 1;
    }

    // 填充数据
    outer->outerMember = 10;
    outer->innerPtr->member1 = 3.14f;
    outer->innerPtr->member2 = 2.71f;

    // 使用数据
    printf("Outer member: %d\n", outer->outerMember);
    printf("Inner member1: %f\n", outer->innerPtr->member1);
    printf("Inner member2: %f\n", outer->innerPtr->member2);

    // 释放内存
    free(outer->innerPtr);
    free(outer);

    return 0;
}