我为大学编写了这个代码,它是练习列表和子列表的练习,我无法运行它。
#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;? 那是问题吗? 有人可以帮助我吗?
答案 0 :(得分:0)
您使用nuevo
为malloc
分配了内存,但您从未在sub
内为nuevo
分配内存。
您尝试在fscanf
中取消引用它以及将其设置为NULL
的语句。
一个简单的解决方法是为sub
分配空间
nuevo->sub = malloc(sizeof(*Sublista));
你的错误现在都应该消失。 请记得在之前释放sub ,然后释放nuevo。