• Domingo 5 de Mayo de 2024, 02:45

Autor Tema:  listas enlazadas - ver error  (Leído 1082 veces)

infielofcielo

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
listas enlazadas - ver error
« en: Lunes 24 de Agosto de 2009, 22:47 »
0
1.- hola quiero que me ayuden porque me vota mi error .porque cuando quiero trabajar con tipo string me vota un error
ERROR:no se puede adquirir la direccion,obtener el tamaño ni declarar un puntero a un tipo administrado.
pero cuando trabajo con double , int  normal trabaja quisiera que me ayuden ah analizar.

2.- es necesario liberar memoria aqui en el C# como en el c++ free(nodo) una checadita mi codigo gracias


Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace ConsoleApplication7
  5. {
  6.     public unsafe class Program
  7.     {          
  8.         public struct Nodo
  9.         {
  10.             public string Nombre;
  11.             public int Valor;
  12.             public Nodo* siguiente;
  13.         }
  14.         static void Main(string[] args)
  15.         {
  16.             int op;
  17.             Nodo* Lista;
  18.             Lista = null;
  19.             while (true)
  20.             {
  21.                 Console.Clear();
  22.                 Console.WriteLine("1.-Ingresar Datos");
  23.                 Console.WriteLine("2.-Eliminar Datos");
  24.                 Console.WriteLine("3.-Mostrar Datos");
  25.                 Console.WriteLine("4.-Salir");
  26.                 Console.Write("Ingresa Opcion:");
  27.                 op = int.Parse(Console.ReadLine());
  28.                 Console.Clear();
  29.                 if (op == 1)
  30.                 {
  31.                     Console.Write("Ingresa Edad:");
  32.                     int v = int.Parse(Console.ReadLine());
  33.                     Console.Write("Ingresa Nombre:");
  34.                     string nom = Console.ReadLine();
  35.                     Nodo* anterior;
  36.                     //Se crea un nodo llamado Q
  37.                     //y se le asigna espacio en memoria
  38.                     Nodo* nuevo = stackalloc Nodo[1];
  39.                     nuevo->Valor = v;
  40.                     nuevo->Nombre = nom;
  41.                     if (Lista == null)
  42.                     {
  43.                         nuevo->siguiente = Lista;
  44.                         Lista = nuevo;
  45.                     }
  46.                     else
  47.                     {
  48.                         anterior = Lista;
  49.                         while (anterior->siguiente != null)
  50.                         {
  51.                             anterior = anterior->siguiente;
  52.                         }
  53.                         nuevo->siguiente = anterior->siguiente;
  54.                         anterior->siguiente = nuevo;
  55.                     }
  56.                 }
  57.                 else if (op == 2)
  58.                 {
  59.                     Nodo* Q;
  60.                     Nodo* T=stackalloc Nodo[1];
  61.                     if (Lista == null)
  62.                         Console.WriteLine("Lista Vacia");
  63.                     else
  64.                     {
  65.                         if (Lista->siguiente == null)
  66.                             Lista = null;
  67.                         else
  68.                         {
  69.                             Q = Lista;
  70.                             while (Q->siguiente != null)
  71.                             {
  72.                                 T = Q;
  73.                                 Q = Q->siguiente;
  74.                             }
  75.                             T->siguiente = null;
  76.                             //free(Q);//Como hago esto en el C#
  77.                             //como libero memoria
  78.                         }
  79.                         Console.WriteLine("Dato Eliminado");
  80.                     }
  81.                 }
  82.                 else if (op == 3)
  83.                 {
  84.                     Nodo* nodo;
  85.                     if (Lista == null)
  86.                         Console.WriteLine("Lista Vacia");
  87.                     else
  88.                     {
  89.                         nodo = Lista;
  90.                         while (nodo != null)
  91.                         {
  92.                             Console.Write("{0},{1}->", nodo->Valor,nodo->Nombre);
  93.                             nodo = nodo->siguiente;
  94.                         }
  95.  
  96.                     }
  97.                 }
  98.                 else if (op == 4)
  99.                     System.Environment.Exit(0);
  100.                 string z = Console.ReadLine();
  101.             }
  102.         }
  103.     }
  104. }
  105.  
  106.  

infielofcielo

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: listas enlazadas - ver error
« Respuesta #1 en: Martes 25 de Agosto de 2009, 20:31 »
0
la solcuion ah la pregunta 2

RECOLECCION DE BASURA

como los objetos se asignan dinamicamente , cuando estos objetos se destruyen sera necesrio verficar que la memoria ocupada por ellos ha queado liberada para usos posteriores. El procedimiento de liberacion es distinto segun el tipo de lenguaje Utilizado.

En C++ los objetos asignados dinamicamente se deben liberar utilizando un operador free o delete. Por el contrario Java y C# tienen un enfoque diferente. Manejan la liberacion de memoria de modo automatico la tecnica que utilizan se dedomina recoleccion de basura (garbage collection). Su funcionamiento es el sigueinte cuando no existe ninguna refrencia a un objeto, se supone que ese objego ya no se necesita, y la memoria ocupada por ese objeto puede ser recuperada(liberada). NO hay necesidad de destrir objetos explicitamente como hace
C++.La recoleccion de basura solo ocurre esporadicamente dureçante la ejecucion de su programa. No sucede simplemente porque los objetos dejen de ser utilizados.