我可以使用 - >在c?这给我带来了一个错误

时间:2017-05-03 04:19:11

标签: c

我为大学编写了这个代码,它是练习列表和子列表的练习,我无法运行它。

#include <stdio.h>
#include <stdlib.h>

typedef struct nodito{
    int dato;
    struct nodito *sig;}nodito;

typedef struct nodito * Sublista;

typedef struct nodo{
    char nombre[10];
    Sublista sub;
    struct nodo *sig;}nodo;

typedef struct nodo *TLista;

void cargoL(TLista *L){
    FILE *arch;
    TLista nuevo,ant,act;
    Sublista nuevito;
    arch=fopen("texto.txt","rt");
    if (arch==NULL){
        printf("archivo no existe \n");
    }
    else{
        while(!feof(arch)){
            nuevo=(TLista)malloc(sizeof(nodo));
            fscanf(arch,"%s %d",(nuevo->nombre),& (nuevo->sub->dato));
            if ( *L==NULL || strcmp((*L)->nombre,nuevo->nombre)>0){
                nuevo->sig=*L;
                *L=nuevo;
                nuevo->sub->sig=NULL;
            }
            else{
                ant=NULL;
                act=*L;
                while ( act!=NULL && strcmp(act->nombre,nuevo->nombre)<=0){
                    ant=act;
                    act=act->sig;
                }
                if (act!=NULL && strcmp(act->nombre,nuevo->nombre)==0){
                    nuevito=(Sublista)malloc(sizeof(nodito));
                    nuevito->dato=nuevo->sub->dato;
                    free(nuevo);
                    nuevito->sig=act->sub;
                    act->sub=nuevito;
                }
                else{
                    ant->sig=nuevo;
                    nuevo->sig=act;
                }
            }
        }
    }
    fclose(arch);
}

nuevo->sub->sig=NULL行给我一个错误 同样适用于fscanf(arch,"%s %d",(nuevo->nombre),& (nuevo->sub->dato))

我可以使用双 - &gt;? 那是问题吗? 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您使用nuevomalloc分配了内存,但您从未在sub内为nuevo分配内存。

您尝试在fscanf中取消引用它以及将其设置为NULL的语句。

一个简单的解决方法是为sub分配空间

nuevo->sub = malloc(sizeof(*Sublista));

你的错误现在都应该消失。 请记得在之前释放sub ,然后释放nuevo。