PDA

Ver la versión completa : Problema al pedir nuevo espacio en memoria



Croland
15-10-2014, 07:34 PM
Gente tengo un problema que la verdad, me saca y no tengo ni idea porque lo hace. Si alguno sabe porque lo hace si seria tan amable de darme una mano, muchas gracias.

http://www.subeimagenes.com/img/error-1126235.jpg

Les dejo el codigo de el main, el hpp y el cpp


main

#include<iostream>
#include<cstring>
#include<stdio.h>
#include<cstdlib>
#include"OBD.H"
using namespace std;


int main ()
{
Ttabla BD=NULL;
char * opcion=new char;
char * dat=new char;
//char * dato=new char;
do
{
cout<<"#^> ";
cin>>opcion;
if (strcmp(opcion,"exit")==0)
{
return 0;
}
else if (strcmp(opcion,"printTables")==0)
{
printTables(BD);
//getchar();
//system("cls");
}
cin>>dat;
dat=strtok(dat,"()");
cout<<dat<<endl;
if (strcmp(opcion,"createTable")==0)
{
cout<<"Entrando"<<endl;
if (createTable(BD,dat)==0)
{
cout<<"Tabla creada exitosamente."<<endl;
}
else
{
cout<<"Ya existe una tabla con nombre "<<dat<<" en la base de datos."<<endl;
}
//getchar();
//system("cls");
}
}while(strcmp(opcion,"exit")!=0);
return 0;
}


obd.cpp

#include<iostream>
#include<cstdio>
#include"OBD.H"
using namespace std;


Ttabla crearTabla(char * nombreTabla)
{
cout<<"El error ocurre aca"<<endl;
Ttabla nuevo = new tipoTabla;
strcpy(nuevo->nombre,nombreTabla);
nuevo->sigT=NULL;
nuevo->priC=NULL;
return nuevo;
}


int insertarTabla (Ttabla &b, Ttabla nuevo)
{
Ttabla aux;
if (b==NULL)
{
nuevo->sigT=b;
b=nuevo;
return 0;
}
else
{
aux = b;
while (aux->sigT!=NULL)
{
aux = aux->sigT;
}
nuevo->sigT=aux->sigT;
aux->sigT=nuevo;
}
return 0;
}


TipoRet createTable (Ttabla &base, char * nombreTabla) //Encabezado modificado, no se puede manejar una lista sin llamarla previamente
{
Ttabla aux=base;
int cont=0;
while (aux!=NULL)
{
if (strcmp(aux->nombre,nombreTabla)==0)
{
cont++;
cout<<"Nombres iguales"<<endl;
getchar();
}
aux=aux->sigT;
}
if (cont==1)
{
cout<<"No insertamos"<<endl;
return ERROR;
}
else
{
insertarTabla(base, crearTabla(nombreTabla));
cout<<"Se crea la nueva tabla"<<endl;
return OK;
}
}


TipoRet dropTable (char * nombreTabla)
{
return NO_IMPLEMENTADA;
}


TipoRet addCol (char * nombreTabla, char * nombreCol)
{
return NO_IMPLEMENTADA;
}


TipoRet dropCol (char * nombreTabla, char * nombreCol)
{
return NO_IMPLEMENTADA;
}


TipoRet insertInto (char * nombreTabla, char * valoresTupla)
{
return NO_IMPLEMENTADA;
}


TipoRet deleteFrom (char * nombreTabla, char * condicionEliminar)
{
return NO_IMPLEMENTADA;
}


TipoRet join (char * nombreTabla1, char * nombreTabla2, char * nombreTabla3)
{
return NO_IMPLEMENTADA;
}


TipoRet equalTables (char * nombreTabla1, char * nombreTabla2, bool & iguales)
{
return NO_IMPLEMENTADA;
}


TipoRet printTables (Ttabla b)//Necesita que le pase la BD, de lo contrario no tengo datos para mostrar
{
Ttabla aux = b;
if (b==NULL)
{
cout<<"No hay tablas en la base de datos."<<endl;
return OK;
}
else
{
while (aux!=NULL)
{
cout<<"|| "<<aux->nombre<<" ||"<<endl;
aux=aux->sigT;
}
}
return OK;
}


TipoRet printMetadata (char * nombreTabla)
{
return NO_IMPLEMENTADA;
}


TipoRet printDataTable (char * nombreTabla)
{
return NO_IMPLEMENTADA;
}


TipoRet recent ()
{
return NO_IMPLEMENTADA;
}


obd.h

//Operaciones sobre la Base de Datos
#ifndef OBD_H
#define OBD_H
enum _retorno{
OK, ERROR, NO_IMPLEMENTADA
};


typedef enum _retorno TipoRet;


typedef struct tabla{
char * nombre;//nombre de la tabla
struct tabla *sigT;//puntero a siguiente tabla
struct columna *priC;//puntero a primer columna
}tipoTabla;


typedef struct columna{
char nomCol;//nombre de la columna
struct columna *sigC;//puntero a siguiente columna
struct datos *priD;//puntero al dato de la columna
}tipoColumna;


typedef struct datos{
char info;//datos en la columna
struct datos *sigD;//puntero a siguiente dato
}tipoDato;


typedef tipoTabla *Ttabla;// Tipo para crear tablas
typedef tipoColumna *Tcol; // Tipo para crear columnas
typedef tipoDato *Tdat;// Tipo para crear datos


Ttabla crearTabla (char * nombreTabla);
int insertarTabla (Ttabla &, Ttabla);
TipoRet createTable (Ttabla &, char * nombreTabla);
TipoRet dropTable (char * nombreTabla);
TipoRet addCol (char * nombreTabla, char * nombreCol);
TipoRet dropCol (char * nombreTabla, char * nombreCol);
TipoRet insertInto (char * nombreTabla, char * valoresTupla);
TipoRet deleteFrom (char * nombreTabla, char * condicionEliminar);
TipoRet join (char * nombreTabla1, char * nombreTabla2, char * nombreTabla3);
TipoRet equalTables (char * nombreTabla1, char * nombreTabla2, bool & iguales);
TipoRet printTables (Ttabla);
TipoRet printMetadata (char * nombreTabla);
TipoRet printDataTable (char * nombreTabla);
TipoRet recent ();




#endif