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 C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pila dinamica en C, violacion de memoria?????
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pila dinamica en C, violacion de memoria?????  (Leído 4,628 veces)
shin_akuma

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Pila dinamica en C, violacion de memoria?????
« en: 15 Febrero 2011, 01:18 am »

Que tal amigos bueno como viene en el tema tengo un problema con la implemetacion de una pila dinamica.

bueno lo principal de la implementacion ya esta que es pop push el problema viene cuando intento borrar la pila por completo e imprimirla bueno este es el codigo:

Directiva.h
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef int tipo;

typedef struct Pila
{
    tipo dato;
    struct Pila *Sig;
   
}PILAD;

// Funciones R-W

void InsertaPila(PILAD **, tipo);
tipo Remover(PILAD **);
tipo Tope(PILAD *);
void BorraPila(PILAD **);
void ImprimirPila(PILAD *);


Funciones.cpp
Código:
#include "Directiva.h"

void InsertaPila(PILAD **top ,tipo Elem)
{
    PILAD *Aux = (PILAD *)malloc(sizeof(PILAD));
    Aux->dato=Elem;
    Aux->Sig = *top;
    *top = Aux;
}

tipo Remover(PILAD **A)
{
    tipo cont;
    PILAD *aux = (PILAD *)malloc(sizeof(PILAD));
    aux=*A;
   
    if(!aux)
    {
        cont = aux->dato;
        *A = (*A)->Sig;
        free(aux); 
        return  cont;     
    }
   
    else
    {
         printf("Pila vacia");
         exit(-1);
    }
}

tipo Tope(PILAD *A)
{
     return(A->dato);
}

void BorraPila(PILAD **A)
{
     tipo Elem;
     while (!A)
     {
         Elem = Remover (A);
     }

}

void ImprimirPila(PILAD *A)
{
     PILAD *Aux=(PILAD *)malloc(sizeof(PILAD));
     tipo Elem;
     for(Aux=A;Aux->Sig!=NULL;Aux=Aux->Sig)
     {
         Elem = Aux->dato;
         printf(" %d \n",Elem);
     }
}



main.cpp
Código:
#include "funciones.cpp"

main ()
{
     char Opc1;
     int Opc2,aux;
     PILAD *A;
     
     do
     {
         system ("cls");
         printf ("\t\t Estructura Pila Dinamica\n\n\n");
         printf ("1.- Insertar elemento en pila ");
         printf ("\n2.- Quitar elemento de pila");
         printf ("\n3.- Ver ultimo elemento y el numero de elemtos en la pila");
         printf ("\n4.- Vaciar la pila");
         printf ("\n5.- Ver elcontenido de la pila");
         printf ("\n6.- Salir de la aplicacion");
         printf ("\n\n\n  Inserta el numero de la funcion a realizar: ");
         scanf ("%d",&Opc2);
         
         switch(Opc2)
         {
             case 1:
                  system("cls");
                  printf ("\n\n Ingresa un numero para insertar en la pila: ");
                  scanf ("%d",&aux);
                  InsertaPila (&A, aux);
             break;
             
             case 2:
                  system("cls");
                  printf ("\n\n El ultimo elemento extraido de la pila es: %d",Remover(&A));
                 
             break;
             
             case 3:
                  system("cls");
                  printf ("\n\n El ultimo elemento de la pila es: %d",Tope (A));
             break;
             
             case 4:
                  system("cls");
                  BorraPila(&A);
                  printf ("\n\n La pila a sido eliminada exitosamente");
                 
             break;             
           
             case 5:
                  System ("cls");                 
                  ImprimirPila(A);
             break;
 
             case 6:                 
                  exit(-1);
             break;
             
             default:
                   system("cls");
                   printf ("La opcion no es valida");
             break;
         }
         
         
         printf ("\n\nDeseas seguir en esta aplicacion [S/N]: ");
         scanf ("%s",&Opc1);
     }
     while ( Opc1 == 'S'  ||  Opc1 == 's' );     
}


Bueno este fue el codigo el problema viene cuando intento ver o eliminar (Cuando hay elementos) se produce un error de accedo de memoria por favor ayudeme
ya que nesesito el programa lo mas pronto posible de antemano gracias.


En línea

El conocimiento es poder!!!

Saludos!!


Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Pila dinamica en C, violacion de memoria?????
« Respuesta #1 en: 15 Febrero 2011, 10:20 am »

Depuralo, asi entenderas el problema.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines