标题:C语言创建链表问题
只看楼主
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
结帖率:58.33%
已结贴  问题点数:20 回复次数:3 
C语言创建链表问题
程序代码:
linklist* create()
{
    FILE* fp;
    int r;
    if ((fp = fopen("D:\\1.txt", "r")) == NULL)//打开文件 打开方式为读取 如果为空则输出
    {
        printf("*无法打开文件\n");
        printf("*请检查文件存放\n");
        exit(1);
    }
    linklist* head, * tail, * node;
    head = NULL;
    tail = head;
    for (int i = 0;; i++)
    {
        node = (linklist*)malloc(LEN);
        r = fscanf(fp, "%d %s %s %d %d %s %s", &node->num, node->name, node->guige, &node->danjia, &node->data, node->name2, node->beizhu);
        if (head == NULL)
        {
            head = node;
        }
        else
        {
            tail->next = node;在这会提示     : 引发了未经处理的异常:写入访问权限冲突。**tail** 是 nullptr。 出现了
            tail = node;
        }
        if (r == EOF)
        {
            break;
        }
    }
    if (head != NULL)
    {
        tail->next = NULL;
    }
    return head;
}
搜索更多相关主题的帖子: head NULL node C语言 文件 
2020-05-21 15:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
head = NULL;
tail = head;
此时 tail == NULL

tail->next = node;在这会提示     : 引发了未经处理的异常:写入访问权限冲突。**tail** 是 nullptr。 出现了
既然 tail == NULL,那么 tail->next 当然会报错啦
2020-05-21 15:50
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
回复 2楼 rjsp
我删除了 tail=head;
也会报错 引发了未经处理的异常:写入访问权限冲突。**tail** 是 0xCCCCCCCC。 出现了
是不是没有分配内存?

2020-05-21 16:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 D2284581470
你这是在搞笑吧,我说你的 tail 设置错误,不等于说你不设置它它就正确。
比如,你考试某道题答错了,老师给你了个叉。不等于说你这道题不答,老师就给你这道题满分。

你的代码不全,也不给 d:\1.txt 的内容,……。若非我追求“有始有终”,真不想回答这种三无产品的问题
补充并简化一下代码,
d:\1.txt 内容为 “0 1 2 3 4 5 6”,那么以下代码输出“0 1 2 3 4 5 6 ”
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node {
    int value;
    struct node* next;
} linklist;

linklist* create( void )
{
    FILE* fp = fopen( "D:\\1.txt", "r" );
    if( !fp )
    {
        puts( "无法打开文件" );
        return NULL;
    }

    linklist* head = NULL;
    for( linklist** p=&head; ; )
    {
        linklist tmp = { .next=NULL };
        if( 1 != fscanf(fp,"%d",&tmp.value) )
            break;

        *p = malloc( sizeof(linklist) );
        memcpy( *p, &tmp, sizeof(linklist) );
        p = &((*p)->next);
    }

    fclose( fp );
    return head;
}

int main( void )
{
    linklist* head = create();
    for( linklist* p=head; p; p=p->next )
        printf( "%d ", p->value );
}

2020-05-21 16:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501714-1-1.html




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

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