Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;分段故障“;当我在主楼打电话时_C++_List_Function_Segmentation Fault_Call - Fatal编程技术网

C++ &引用;分段故障“;当我在主楼打电话时

C++ &引用;分段故障“;当我在主楼打电话时,c++,list,function,segmentation-fault,call,C++,List,Function,Segmentation Fault,Call,当我想从main访问lista->arch->nombreArchivo中的数据时,我对这段特定的代码有问题。程序崩溃了,当我调试它时,我发现问题是“分段错误”——一种错误。我想我缺少分配,但我不知道在哪里 注意:我想做的是为struct\u archivo创建一个列表(listarchivo),因此可能错误在函数insertarachivolistarchivos()中 下面是main()代码: 以下是listaArchivos标题: struct _listaArchivos{ //defi

当我想从main访问lista->arch->
nombreArchivo
中的数据时,我对这段特定的代码有问题。程序崩溃了,当我调试它时,我发现问题是“分段错误”——一种错误。我想我缺少分配,但我不知道在哪里

注意:我想做的是为
struct\u archivo
创建一个列表(listarchivo),因此可能错误在函数
insertarachivolistarchivos()

下面是main()代码:

以下是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;
    }
}

我能做什么?同时,我将继续阅读有关指针/列表的内容,并尝试找出答案。

以下是我发现的可能导致您的问题的一些问题:

使用字符串时,字符0、“0”和数字0之间存在差异。您需要将数字的文本表示形式转换为内部表示形式

既然你把问题标记为C++,我建议你使用<代码> STD::String 和<代码>查找< /Cult>方法,而不是C函数<代码> Strtok> < /C>。在StackOverflow中搜索“[c++]解析号”

使用命名标识符而不是幻数。
例如,使用:

`#define MAXIMUM_ARRAY_SIZE 50`  
`//...`  
`char frase[MAXIMUM_ARRAY_SIZE];`  
`//...`  
`fgets(frase, MAXIMUM_ARRAY_SIZE, stdin);`   
这确保您只需在一个位置更改数字,所有代码都将使用相同的数字

因为你正在使用C++,请使用<代码> STD::列表< /Cord>,不要浪费时间创建你自己的链表。

std::list
已经过测试,因此您无需对其进行测试

在C++中使用菜单选择读取,尝试:

int selection;
cin >> selection;
switch (selection)
{
  //...
}

调试器说是哪一行导致了SEGFULT?请不要大声喊叫。另外,请不要试图让人们为您的应用程序玩调试器。导致问题的那一行是main()上的那一行。请看一下指南。这将有助于大大改进您的问题。
lista
lista->arch
为null(或无效),或者重载的
运算符内部出现其他错误
`#define MAXIMUM_ARRAY_SIZE 50`  
`//...`  
`char frase[MAXIMUM_ARRAY_SIZE];`  
`//...`  
`fgets(frase, MAXIMUM_ARRAY_SIZE, stdin);`   
int selection;
cin >> selection;
switch (selection)
{
  //...
}