MST

星途 面试题库

面试题:C语言结构体动态初始化与内存管理

编写代码实现一个结构体链表,结构体包含一个整型数据成员和一个指向下一个结构体的指针成员。要求在链表节点创建时,通过动态内存分配完成结构体的初始化,并处理好内存释放问题,同时考虑如何在初始化过程中避免内存泄漏。
37.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

// 定义结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 创建新节点
Node* createNode(int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (newNode == NULL) {
        perror("内存分配失败");
        return NULL;
    }
    newNode->data = value;
    newNode->next = NULL;
    return newNode;
}

// 释放链表内存
void freeList(Node* head) {
    Node* current = head;
    Node* nextNode;
    while (current != NULL) {
        nextNode = current->next;
        free(current);
        current = nextNode;
    }
}

int main() {
    // 创建链表
    Node* head = createNode(10);
    Node* second = createNode(20);
    Node* third = createNode(30);

    // 连接节点
    head->next = second;
    second->next = third;

    // 释放链表内存
    freeList(head);

    return 0;
}
  1. 结构体定义
    • 定义了一个名为Node的结构体,包含一个整型成员data和一个指向下一个Node结构体的指针next
  2. 创建节点函数createNode
    • 使用malloc动态分配内存来创建新的节点。
    • 检查内存分配是否成功,如果失败,使用perror输出错误信息并返回NULL
    • 初始化新节点的数据成员data,并将next指针初始化为NULL
  3. 释放链表内存函数freeList
    • 通过遍历链表,逐个释放每个节点的内存,从而避免内存泄漏。
  4. main函数
    • 创建几个节点,并连接成链表。
    • 最后调用freeList函数释放链表占用的内存。