| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 961 人关注过本帖
标题:关于malloc的困惑
只看楼主 加入收藏
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:4 
T版主是台湾人?为什么总是用繁体字,好多都不认识啊

一片落叶掉进了回忆的流年。
2015-03-16 18:57
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
收藏
得分:0 
回复 10楼 TonyDeng
嗯,我刚刚说的的确有问题,但是这个代码后面不是对每个都判断了吗?
 pnewelement=(STU*)malloc(sizeof(STU));
            if(pnewelement==NULL){
                printf("头结点内存申请失败");
                return NULL;
            }
            pnewelement->num=n;
            pnewelement->score=s;
            pnewelement->next=NULL;
            tail->next=pnewelement;
            tail=pnewelement;
2015-03-16 20:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
先寫這麽一點,待會弄一個帖專門解釋鏈表的問題。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

// 結點數據結構
struct Node
{
    int   Value;                // 數據的内容(按需要可爲任何數據類型)
    Node* Next;                 // 數據的地址
};

// 函數原型
void Pause(void);
Node* GetNode(void);
void ShowData(const Node* node);
void ListLinkData(const Node* head);
void FreeLink(Node* head);

// 程序主入口
int main(void)
{
    Node* linkHead = GetNode();
    if (linkHead != NULL)
    {
        Node* p = linkHead;
        Node *node;
        while ((node = GetNode()) != NULL)
        {
            p->Next = node;
            p = node;
        }
    }
    ListLinkData(linkHead);
    FreeLink(linkHead);

    Pause();
    return EXIT_SUCCESS;
}

// 暫停等待用戶按鍵
void Pause(void)
{
    printf_s("\n按任意鍵繼續...");
    _getch();
}

// 創建一個結點數據並從鍵盤輸入內容,以輸入0爲結束標識
Node* GetNode(void)
{
    Node* node = (Node*)calloc(1, sizeof(Node));
    if (node != NULL)
    {
        do
        {
            printf_s("請輸入結點數據: ");
            fflush(stdin);          // 清空標準輸入流緩衝區
            node->Value = 0;
        } while ((scanf_s("%d", &node->Value) != 1) && (node->Value != 0));
        if (node->Value == 0)
        {
            // 輸入零結束時應把當前已申請的內存釋放掉
            free(node);
            node = NULL;
        }
    }
    else
    {
        printf_s("內存不足");
    }
    return node;
}

// 輸出結點的信息
void ShowData(const Node* node)
{
    printf_s("Adress = %p, Value = %d, Next = %p\n", node, node->Value, node->Next);
}

// 從指定的結點開始列出鏈表數據
void ListLinkData(const Node* head)
{
    if (head != NULL)
    {
        const Node* node = head;
        do
        {
            ShowData(node);
            node = node->Next;
        } while (node != NULL);
    }
}

// 刪除並釋放從指定節點開始的鏈表數據
void FreeLink(Node* head)
{
    if (head != NULL)
    {
        Node* next;
        do
        {
            next = head->Next;
            free(head);
            head = NULL;
            head = next;
        } while (next != NULL);
    }
}



授人以渔,不授人以鱼。
2015-03-16 21:25
快速回复:关于malloc的困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033926 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved