• Domingo 15 de Diciembre de 2024, 04:37

Autor Tema:  Error En Asignacion De Memoria, New Y Delete  (Leído 836 veces)

janux

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Error En Asignacion De Memoria, New Y Delete
« en: Jueves 27 de Abril de 2006, 05:10 »
0
Tengo dos clases de la siguiente forma (aproximado) y el programa principal
Código: Text
  1.  
  2. /*Clase tnodo*/
  3. //archivo tnodo.h
  4. class Tnodo{
  5. private:
  6.   char *cad;
  7.   int id;
  8.   /*demas atributos...*/
  9. public:
  10.   Tnodo();
  11.   ~Tnodo();
  12.   void Init(int l)
  13.   /* demas metodos....*/
  14. }
  15.  
  16. //archivo tnodo.cpp
  17. #include "tnodo.h"
  18.  
  19. Tnodo::Tnodo(){
  20.   id=0;
  21. }
  22.  
  23. Tnodo::~Tnodo(){
  24.   delete [] cad;
  25. }
  26.  
  27. void Tnodo::Init(int l){
  28.   cad=new char[l];
  29. }
  30.  
  31. /*clase Testructura*/
  32. //archivo testructura.h
  33. #include "tnodo.h"
  34.  
  35. class Testructura{
  36. private:
  37.   Tnodo *arreglo1;
  38.   Tnodo *arreglo2;
  39.   int id;
  40.   int number;
  41.   int length;
  42.   /*demas atributos...*/
  43. public:
  44.   Testructura();
  45.   ~Testructura();
  46.   void Init(int n, int l);
  47.   void Terminate();
  48.   void Copy();
  49.   /* demas metodos....*/
  50. }
  51.  
  52. //archivo testructura.cpp
  53. #include "testructura.h"
  54.  
  55. Testructura::Testructura(){
  56.   id=0;
  57. }
  58.  
  59. Testructura::~Testructura(){
  60.   //....
  61. }
  62.  
  63. void Testructura::Init(int n, int l){
  64.   int i;
  65.   number=n;
  66.   length=l;
  67.   //inicializa arreglo1
  68.   arreglo1=new Tnodo[number];
  69.   for (i=0; i<n; i++)
  70.     arreglo1[i].Init(length);
  71.   //inicializa arreglo2
  72.   arreglo2=new Tnodo[number];
  73.   for (i=0; i<n; i++)
  74.     arreglo2[i].Init(length);
  75.  
  76. }
  77.  
  78. void Testructura::Terminate(){
  79.   delete [] Tnodo;
  80. }
  81.  
  82. void  Testructura::Copy(){
  83.   //copia arreglo1 sobre arreglo2
  84.   bcopy((Tnodo *) arreglo1, (Tnodo *) arreglo2, (int) (sizeof(Tnodo) * number));
  85. }
  86.  
  87.  
  88. /*programa principal*/
  89. #include "testructura.h"
  90.  
  91. int main(int argc, char *argv[]){
  92.   bool flag;  
  93.   Testructura lista;
  94.  
  95.   do{
  96.     //leer parametros de la lista n y l
  97.     lista.Init(n,l);
  98.    
  99.     //demas operaciones
  100.     lista.Copy();
  101.    
  102.     lista.Terminate();
  103.    
  104.     //modificar condicion de terminacion de bucle
  105.   } while (!flag)
  106.  
  107.   return 0;
  108. } //fin
  109.  
  110.  
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