Dev - C++ - error en asignacion de memoria, new y delete

 
Vista:

error en asignacion de memoria, new y delete

Publicado por Alex (1 intervención) el 27/04/2006 04:24:45
Tengo dos clases de la siguiente forma (aproximado) y el programa principal

/*Clase tnodo*/
//archivo tnodo.h
class Tnodo{
private:
char *cad;
int id;
/*demas atributos...*/
public:
Tnodo();
~Tnodo();
void Init(int l)
/* demas metodos....*/
}

//archivo tnodo.cpp
#include "tnodo.h"

Tnodo::Tnodo(){
id=0;
}

Tnodo::~Tnodo(){
delete [] cad;
}

void Tnodo::Init(int l){
cad=new char[l];
}

/*clase Testructura*/
//archivo testructura.h
#include "tnodo.h"

class Testructura{
private:
Tnodo *arreglo1;
Tnodo *arreglo2;
int id;
int number;
int length;
/*demas atributos...*/
public:
Testructura();
~Testructura();
void Init(int n, int l);
void Terminate();
void Copy();
/* demas metodos....*/
}

//archivo testructura.cpp
#include "testructura.h"

Testructura::Testructura(){
id=0;
}

Testructura::~Testructura(){
//....
}

void Testructura::Init(int n, int l){
int i;
number=n;
length=l;
//inicializa arreglo1
arreglo1=new Tnodo[number];
for (i=0; i<n; i++)
arreglo1[i].Init(length);
//inicializa arreglo2
arreglo2=new Tnodo[number];
for (i=0; i<n; i++)
arreglo2[i].Init(length);

}

void Testructura::Terminate(){
delete [] Tnodo;
}

void Testructura::Copy(){
//copia arreglo1 sobre arreglo2
bcopy((Tnodo *) arreglo1, (Tnodo *) arreglo2, (int) (sizeof(Tnodo) * number));
}

/*programa principal*/
#include "testructura.h"

int main(int argc, char *argv[]){
bool flag;
Testructura lista;

do{
//leer parametros de la lista n y l
lista.Init(n,l);

//demas operaciones
lista.Copy();

lista.Terminate();

//modificar condicion de terminacion de bucle
} while (!flag)

return 0;
} //fin

El problema que tengo es cuando se ejecuta lista.Copy(); en la segunda iteracion, el programase queda colgado. Es correcta la forma de asignar y liberar memoria?.
Los compiladores que utilizo son g++ y mpicxx (para aplicaciones paralelas)
Gracias por vuestra ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:error en asignacion de memoria, new y delete

Publicado por ale (4 intervenciones) el 03/05/2006 00:08:40
hola incluye esto en tu constructor
Tnodo::Tnodo()
{
cad= new char[100];/*Entre corchetes el tamaño que desees*/
id=0;
}
Tnodo::Init(int I)
{
sprintf(cad,"%d",I);
}
Tnodo::~Tnodo()
{
delete[] cad;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar