elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  listas enlazadas - ver error
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: listas enlazadas - ver error  (Leído 4,584 veces)
Choclito

Desconectado Desconectado

Mensajes: 99



Ver Perfil
listas enlazadas - ver error
« en: 24 Agosto 2009, 22:56 pm »

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
  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.  


En línea

Choclito

Desconectado Desconectado

Mensajes: 99



Ver Perfil
Re: listas enlazadas - ver error
« Respuesta #1 en: 25 Agosto 2009, 20:29 pm »

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.


En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: listas enlazadas - ver error
« Respuesta #2 en: 26 Agosto 2009, 18:32 pm »

Has una cosa:
Dinos cuando te da el error.. si cuando quieres agregar datos.. borrarlos.. modificarlos.. que?.. o no puedes compilarlo?? o que??
 copianos el error exactamente como dice.. dinos la linea y todo elllo...
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: listas enlazadas - ver error
« Respuesta #3 en: 26 Agosto 2009, 18:47 pm »

Estas usando C# como si fuera C++ y no es asi...

Si bien en C# se pueden usar punteros, no se usan de esa manera. La asignacion de memoria es automatica, debes lidiar con eso ;)

Ahora no tengo mucho tiempo, pero a la tarde te dare practicamente lo que quieres pero en visual basic .net, asi te dejo el simple trabajo de convertirlo a C# ;)


(no te imaginas lo que fue para hacer una lista doblemente enlazada en vb.net  :o)


Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
necesito ayuda por favor.. listas doblemente enlazadas... diganme el error...
Programación C/C++
anthonynlson 1 4,207 Último mensaje 23 Octubre 2012, 00:44 am
por twins
Error con char y métodos listas « 1 2 3 »
Java
Baal_30 22 8,476 Último mensaje 16 Marzo 2015, 09:49 am
por Baal_30
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines