我的密码有问题。当我运行它的时候,它崩溃了..。当我调试时,它说这是一个“分割错误”错误。但我找不到窃听器。这是密码:
listaArchivo.H (标头)
#ifndef LISTAARCHIVOS_H
#define LISTAARCHIVOS_H
#include "Archivo.h"
struct _listaArchivos{
Archivo arch;
};
typedef _listaArchivos* ListaArchivos;
/*
* creates and initializes a new lista of archivos.
*/
ListaArchivos crearListaArchivos(){
ListaArchivos *lista;
(*lista)->arch=NULL;
return *lista;
}
/*
* inserts 'archivo' in 'lista'.
*/
void insertarArchivoListaArchivos(ListaArchivos &lista, Archivo archivo){
Archivo *nuevoArchivo;
nuevoArchivo=new Archivo;
*nuevoArchivo=archivo;
if (lista==NULL){
lista->arch=*nuevoArchivo;
lista->arch->Anterior=NULL;
lista->arch->Siguiente=NULL;
}
}"Archivo.h“(标头)
#ifndef ARCHIVO_H
#define ARCHIVO_H
struct _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){
Archivo *nuevoArchivo;
nuevoArchivo=new Archivo;
(*nuevoArchivo)->Atributos="Lectura/Escritura";
(*nuevoArchivo)->Contenido=NULL;
(*nuevoArchivo)->nombreArchivo=nombreArchivo;
(*nuevoArchivo)->Siguiente=NULL;
(*nuevoArchivo)->Anterior=NULL;
return *nuevoArchivo;
}@Vishnu Kanwar这里是我调用函数的代码:
#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()
{
/* VARS */
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 WHILE UNTILL BOOL=TRUE */
do{
cout <<"> ";
/* ALGORITHM FOR DIVIDING THE FRASE IN 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++;
}
/* SELECTS "COMANDO" COMPARING WITH THE OTHER CHAR* */
if (strcmp(comando,c_DIR)== 0){
cout <<"Uso comando DIR"<<endl<<endl;
}
else{
if (strcmp(comando,c_CREATEFILE)== 0){ **/*HERE IS WHERE I MAKE THE CALLS*/**
*lista=crearListaArchivos();
cout<<"LISTA CREATED SUCCESSFULLY !!"<<endl;
*arch=crearArchivo(parametro1);
cout<<"ARCHIVO CREATED"<<endl;
insertarArchivoListaArchivos(*lista,*arch);
cout <<"THE ARCHIVO WAS ADDED SUCCESFULLY !!"<<endl<<endl;
}
else{
if (strcmp(comando,c_DELETE)== 0){
cout <<"Uso comando DELETE "<<endl<<endl;
}
else{
if (strcmp(comando,c_ATTRIB)== 0){
cout <<"Uso comando ATTRIB"<<endl<<endl;
}
else{
if (strcmp(comando,c_IF)== 0){
cout <<"Uso comando IF"<<endl<<endl;
}
else{
if (strcmp(comando,c_DF)== 0){
cout <<"Uso comando DF"<<endl<<endl;
}
else{
if (strcmp(comando,c_TYPE)== 0) {
cout <<"Uso comando TYPE"<<endl<<endl;
}
else{
if (strcmp(comando,c_CREARSISTEMA)== 0){
cout <<"Uso comando CREARSISTEMA"<<endl<<endl;
}
else{
if (strcmp(comando,c_DESTRUIRSISTEMA)== 0){
cout <<"Uso comando DESTRUIRSISTEMA"<<endl<<endl;
}
else{
if (strcmp(comando,c_EXIT)==0){
cout <<"Saliendo del programa..."<<endl<<endl;
seguir=false;
}
else{
cout << "Comando incorrecto."<<endl<<endl;
}
}
}
}
}
}
}
}
}
}
}while(seguir);
return 0;
}当我主要调用函数crearArchivo和crearListaArchivo时,问题就开始了。其余的似乎都很正常。如果你知道我如何解决这个问题,请帮助我。非常感谢! :)
发布于 2013-11-02 21:04:07
ListaArchivos crearListaArchivos(){
ListaArchivos *lista; 上面的lista是一个_listaArchivos**,在您的代码中未初始化。作为修复(成功执行代码的下一行),您需要初始化lista指出的内存。
`lista=new ListaArchivos`等等!到目前为止,我们有一个有效的_listaArchivos*,但没有_listaArchivos使其有效,您还需要这样做:
*lista = new _listaArchivos;现在,*lista指向内存中的_listaArchivos的一个有效对象,您可以使用(*lista)执行其余的代码。
(*lista)->arch=NULL;
return *lista;
}编辑:尽管有两个new修复了分配问题,但是这种编码方式使得垃圾收集成为一个挑战,并且很难管理。
发布于 2013-11-02 19:45:20
ListaArchivos crearListaArchivos(){
ListaArchivos *lista;
(*lista)->arch=NULL;
return *lista;
}不会创造任何东西。它只是声明一个变量并返回它。这不是一个很好的方法。
试试类似的东西。
ListaArchivos crearListaArchivos(){
ListaArchivos *lista = new ListaArchivos();
lista->arch=NULL;
return *lista;
}并阅读指针,内存,当然,这里的链接
资源获取是初始化
https://stackoverflow.com/questions/19746044
复制相似问题