当我想从 main 访问 lista->arch-> 中的数据时,我遇到了这个特定代码的问题nombreArchivo
。程序崩溃了,当我调试它时,我发现问题是“分段错误”类型的错误。我想我缺少分配,但我不知道在哪里。
注意:我想要做的是制作一个列表(listaArchivo)struct _archivo
,所以可能错误在函数中insertarArchivoListaArchivos()
。
这是 main() 代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdlib>
#include <conio.h>
#include "Sistema.h"
#include "Archivo.h"
#include "Directorio.h"
#include "ListaArchivos.h"
#include "Constantes.h"
using namespace std;
int main()
{
/* VARIABLES */
Cadena c_DIR=(char *)"DIR";
Cadena c_CREATEFILE=(char *)"CREATEFILE";
Cadena c_DELETE=(char *)"DELETE";
Cadena c_ATTRIB=(char *)"ATTRIB";
Cadena c_IF=(char *)"IF";
Cadena c_DF=(char *)"DF";
Cadena c_TYPE=(char *)"TYPE";
Cadena c_CREARSISTEMA=(char *)"CREARSISTEMA";
Cadena c_DESTRUIRSISTEMA=(char *)"DESTRUIRSISTEMA";
Cadena c_EXIT=(char *)"EXIT";
Cadena Segmento;
Cadena comando;
Cadena parametro1;
Cadena parametro2;
bool seguir;
int contador=0;
char frase[50];
Archivo arch;
ListaArchivos lista;
do{
cout <<"> ";
/* ALGORITMO PARA DIVIDIR LA FRASE EN TOKENS */
fgets(frase,50,stdin);
Segmento=strtok(frase," ");
while(Segmento!=NULL){
if( contador == 0 ){
comando=Segmento; /* GUARDA EL COMANDO */
}
if ( contador == 1 ){
parametro1=Segmento; /* GUARDA EL PRIMER PARAMETRO */
}
if( contador == 2 ){
parametro2=Segmento; /* GUARDA EL SEGUNDO PARAMETRO */
}
Segmento=strtok(NULL, " ");
contador++;
}
/* SELECCIONA EL COMANDO INDICADO, COMPARANDO LA CADENA COMANDO CON LAS DIFERENTES CADENAS */
if (strcmp(comando,c_DIR)== 0){
cout <<"Uso comando DIR"<<endl<<endl;
}
else{
if (strcmp(comando,c_CREATEFILE)== 0){
lista=crearListaArchivos(); //CREATE LIST OF ARCH.
cout<<"LISTA CREted, SU DIRECCION ES "<< &lista<<endl;
arch=crearArchivo(parametro1); //CREATE ARCH
cout<<"ARCHIVO CREAted, SU DIRECCION ES"<<&arch<<" SU NOMBRE ES: "<<arch->nombreArchivo<<endl;
insertarArchivoListaArchivos(lista,arch); //INSERTS ARCH IN LIST OF ARCHS
cout <<" THE ARCHIVO IN lista es named ..."<<lista->arch->nombreArchivo<<endl<<endl;
} /*the problem seems to be when I make this call*/
...............................
...............................
...............................
这是档案标题:
struct _archivo{ //aca declaro la estructura de un archivo
Cadena nombreArchivo;
Cadena Atributos;
Cadena Contenido;
_archivo *Siguiente;
_archivo *Anterior;
};
typedef _archivo* Archivo;
/*
* Crea e inicializa un archivo con nombre 'nombreArchivo'
*/
Archivo crearArchivo(Cadena nombreArchivo){
//inicializo
Archivo nuevoArchivo=new _archivo;
nuevoArchivo->nombreArchivo=nombreArchivo;
nuevoArchivo->Siguiente=NULL;
nuevoArchivo->Anterior=NULL;
return nuevoArchivo; //devuelvo el archivo inizializado
}
这是 listaArchivos 标题:
struct _listaArchivos{ //defino la estructura _listaArchivos, que sera una lista de nodos de tipo Archivo, definidos en el header Archivo.h
Archivo arch;
};
typedef _listaArchivos* ListaArchivos;
/*
* Crea, inicializa y retorna una nueva lista de archivos.
*/
ListaArchivos crearListaArchivos(){
ListaArchivos lista = new _listaArchivos;
lista->arch=NULL;
return lista;
}
/*
* Inserta el archivo 'archivo' en la lista 'lista'.
*/
void insertarArchivoListaArchivos(ListaArchivos &lista, Archivo archivo){
ListaArchivos cabezal;
if (lista==NULL){
lista->arch=archivo;
lista->arch->Anterior=NULL;
lista->arch->Siguiente=NULL;
}
else{
cabezal=lista;
while (!cabezal->arch->Siguiente)
cabezal->arch=cabezal->arch->Siguiente;
cabezal->arch->Siguiente=archivo;
archivo->Siguiente=NULL;
archivo->Anterior=cabezal->arch->Siguiente;
}
}
我能做些什么?同时,我将继续阅读有关指针/列表的内容并尝试弄清楚。