C语言实现链表之单向链表(二)结点内存申请及数据初始化

来源:互联网 发布:外文电子图书数据库有 编辑:程序博客网 时间:2024/04/20 17:27

C语言实现链表之单向链表(二)结点内存申请及数据初始化


    在上一篇文章中已经给出了整体的设计框架,现在讲逐一给出每一个函数的实现,为了一一讲解,清晰一点,将分开介绍。

    本篇文章将给出MyList_Single.c---实现文件的第一个函数,即对链表中的一个结点申请内存并对其内部的数据进行初始化的函数。程序如下,由于是第一个函数,所以会给出整个文件的前面部分。

/*******************************************************************************************                                       UART Block**                                      (c) Copyright*                                   All Rights Reserved** Filename :    MyList_Single.c** Function :    单向非循环链表的操作函数定义** History  :    1. wangyi  2015-4-15  23:00  Version 1.0  creat*******************************************************************************************/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "MyList_Single.h"/*============================================================================== *   操作  :为链表的结点分配内存,并初始化数据元素*   操作前:pListNode为链表的结点*   操作后:返回分配内存并初始化后的结点,操作失败返回NULL==============================================================================*/MyListNode* MallocMemInitNode(MyListNode* pListNode){    // 为结点分配存储空间    pListNode = (MyListNode*)malloc(sizeof(MyListNode));    if(pListNode == NULL)    {        // 内存分配失败        fprintf(stderr, "The allocating memory defeat.\n");        return NULL;    }     else    {        // 结点数据初始化        strcpy(pListNode->sNodeData.cName, "");        pListNode->sNodeData.iAge = 0;        pListNode->pNextNodeAddr  = NULL;            }    return pListNode; }

      该程序给出了实现文件的所有头信息,大家可以清晰可见,此处不再赘述。下面只对该函数进行简单解释。

    该函数为传入的结点申请内存,在内存申请成功以后对其内部的数据进行初始化,然后返回申请内存后的结点。这里一定要注意,传入的一级指针虽然分配了内存,但是不能直接传出函数,因为其是值传递,所以必须采用return的方法将申请内存后的指针返回,外部才能使用,至于具体的原因,在我的博客文章《C语言中“指针”作为“函数参数”时的注意事项》中有十分详细的解释,大家可以看一下那篇文章,链接是:

    http://blog.csdn.net/dan15188387481/article/details/49363605
    点击此处可以直接打开该链接的文章

    这个函数对于一些库并不是很推荐使用,因为考虑到哪里分配哪里释放的缘故,在此函数内部申请的内存没有在内部释放,所以在顶层一定要对其内存进行释放,否则会带来内存泄露的恶果,在后面的测试用例中会有介绍。总之,这个函数大家可以考虑不使用,直接在顶层分配内存、初始化、释放内存即可。
1 0
原创粉丝点击