PDA

Visualizza la versione completa : Debug Library C++ con Visual Studio Express 2010


frufru
15-01-2012, 15:48
Il codice seguente dispone di un menu' con tre voci:

1- carica pila
2- elimina elemento della pila
3- stampa intera pila.

Una volta avviato il programma e scegliendo subito o la voce 2 o 3 SENZA aver caricato prima la pila, compare un cout con scritto che non esiste nessun elemento nella pila. Ed infatti è giusto così.

Se scegliessi la voce 1 e dopo decidessi di stampare con la voce 3, funzionerebbe perfettamente.

Se invece decidessi di richiamare la voce 2 DOPO aver caricato la pila, con il tipo di dato corretto ovviamente, ecco che compare questo messaggio di errore (mai incontrato prima):
-----------
Debug Library
Debug Assertion Failed!
expression: _BLOCK_TYPE_IS_VALID(pHeah->nBlockUse)
-----------
:confused:

Chi è disposto ad aiutarmi compili questo codice, così può capire meglio :)
Vi ringrazio!!! :ciauz:
-------------------------------------------------------------------------
CODICE:

// Strutture_dinamiche.cpp : definisce il punto di ingresso dell'applicazione console.
//
//AUTORE:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

struct nodo
{
int dato;
nodo *punt;
};

//Elemento pila
int n;
//PROTOTIPI
void push(nodo *&, int);
void pop(nodo *);
void stampa(nodo *);
void carica(nodo * &);
void elimina(nodo *);
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
nodo *testa=NULL;
short risp, decis;
//Menu'
do
{
cout<<"1 Caricamento pila \n2 Elimina un elemento \n3 Stampa pila \n "<<endl;
cin>>risp;
system("cls");
switch(risp)
{
//allocazione di una o più celle
case 1:
carica(testa);
break;
//deallocazione di una o più celle
case 2:
if(testa==NULL)
cout<<"Nessun elemento esistente. "<<endl;
else
elimina(testa);
break;
//stampa della struttura modificata
case 3:
if(testa==NULL)
cout<<"Nessun elemento esistente. "<<endl;
else
stampa(testa);
};
cout<<"1 - Go on \n2 - End \n "<<endl;
cin>>decis;
system("cls");
}while(decis==1);
_getch();
return 0;
}

//inserimento in testa PUSH (LIFO)
void push(nodo *&testa, int n)
{
nodo *nuovo;
nuovo = new nodo;
nuovo -> dato = n;
nuovo -> punt = testa;
testa = nuovo;
}
void carica(nodo * & start)
{
char scelta;
do{
cout<<"Dato: ";
cin>>n;
push(start, n);
cout<<"Continuare? (s/n): ";
cin>>scelta;

}while(scelta=='s');
}

//Cancellazione in testa POP (FIFO)
void pop(nodo *testa)
{
nodo *p;
p = testa;
testa = testa -> punt;
delete p;
}
void elimina(nodo *start)
{
char scelta2='s';
while(scelta2=='s')
{
pop(start);
cout<<"Continuare? (s/n): ";
cin>>scelta2;
}
}
//Stampa pila
void stampa(nodo *testa)
{
nodo *p;
p = testa;
while(p!=NULL)
{
cout<<" "<<p -> dato<<endl;
p = p -> punt;
}
}
--------------------------------------------------------------------------------------

oregon
15-01-2012, 16:31
Ti domando ... perché hai usato questo header

void push(nodo *&, int);

per passare il puntatore alla testa nel push e quest'altro

void pop(nodo *);

per il pop ?

P.S. DEVI usare i tag CODE e l'indentazione per proporre del codice nel forum ... altrimenti risulta illeggibile ...

frufru
15-01-2012, 21:27
Lo so, sono totalmente inesperto in questo forum :facepalm:
Non so come si faccia :\

Loading