Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, błąd aplikacji] Requested the Runtime to terminate it in an unusual way

Ostatnio zmodyfikowano 2013-06-19 19:47
Autor Wiadomość
kinga9650
Temat założony przez niniejszego użytkownika
[C++, błąd aplikacji] Requested the Runtime to terminate it in an unusual way
» 2013-06-09 12:22:17
Witam,
Napisałam dwa programy. Uruchomienie któregokolwiek z nich kończy się komunikatem:
"This application has requested the Runtime to terminate it in an unusual way" i zamknięciem programu.
W pierwszym przypadku podejrzewam problemy z alokacją pamięci, jednak nie mogę znaleźć miejsca błędu.
W drugim nie mogę znaleźć błędu.
Byłabym wdzięczna za odnalezienie problemu i podanie jego rozwiązania lub chociażby nakierowanie mnie na jego źródło.
 
1. program przekształcający wyrażenie z Odwrotnej Notacji Polskiej na zapis uniwersalny/tradycyjny:
C/C++
#include <iostream>
#include <string>

using namespace std;

#define T string

struct element
{
    T el;
    element * next;
    element * prev;
};

element * firs = NULL;
element * sec = NULL;
element * top = NULL;
element * aktiv = NULL;

void pierwszy( T x )
{
    firs = new element;
    firs->el = x;
    top = firs;
    aktiv = firs;
}

void dodaj( T x )
{
    aktiv = new element;
    aktiv->el = x;
    top->next = aktiv;
    aktiv->prev = top;
    top = aktiv;
}

T wyjmij()
{
    T w = aktiv->el;
    top = aktiv->prev;
    delete aktiv;
    aktiv = top;
    return w;
}

void wypisz()
{
    cout << "Wyrazenie w zapisie tradcyjnym: ";
    do
    {
        cout << firs->el << " ";
        firs = firs->next;
    } while( firs != aktiv );
   
    cout << aktiv->el << endl;
}

void skladowa( T y )
{
    string a, b, c = 0;
    b = wyjmij();
    a = wyjmij();
    c += "(" + a + y + b + ")";
    dodaj( c );
}

int main()
{
    T y = 0;
    cout << "Wprowadz wyrazenie arytmetyczne w Odwrotnej Notacji Polskiej, a nastepnie wcisnij x.\n";
    cin >> y;
    pierwszy( y );
    if( firs == NULL ) cout << "Bad!!!\n";
   
    while( y != "x" )
    {
        cin >> y;
        if( y != "+" && y != "-" && y != "*" && y != "/" ) dodaj( y );
       
        if( aktiv == NULL ) cout << "Bad!!!\n";
        else skladowa( y );
       
    }
    wypisz();
}

2. program do nauki szybkiego pisania (wyświetlany tekst ma być przepisywany jak najszybciej, bezbłędnie; po czym sprawdzana jest poprawność poszczególnych wyrazów)
C/C++
#include <iostream>
#include <fstream>
#include <time.h>
#include <windows.h>

using namespace std;

fstream plik, wynik;
string linia = 0, odp = 0;
char x;
int all = 0, pkt = 0;
time_t start, koniec, czas;

void porownanie()
{
    string spr = "0", por = "0";
    int spacs =- 1, spacp =- 1;
    plik.open( "tekst.txt", ios::in );
    wynik.open( "odpowiedz.txt", ios::in );
    while( !plik.eof() )
    {
        getline( plik, linia );
        getline( wynik, odp );
        for( int l = 0; l < linia.length(); l++ )
        {
            if(( int ) linia[ l ] == 32 )
            {
                for( int k = spacp + 1; k < l; k++ ) por =+ linia[ k ];
               
                spacp = l;
                for( int j = spacs + 1; j < odp.length(); j++ )
                {
                    if(( int ) odp[ j ] == 32 )
                    {
                        for( int m = spacs + 1; m < j; m++ ) spr =+ odp[ m ];
                       
                        spacs = j;
                    }
                    if( spr != "0" ) break;
                   
                }
                if( spr == por ) pkt++;
               
                all++;
                spr = "0";
                por = "0";
            }
        }
    }
    plik.close();
    wynik.close();
}

int main()
{
    cout << "Przepisuj wyswietlany tekst jak najszybciej, nie popelniajac bledow!\nProgram wyliczy czas twoich odpowiedzi i ich trafnosc.\n";
    plik.open( "tekst.txt", ios::in );
    wynik.open( "odpowiedz.txt", ios::trunc | ios::out | ios::in );
    if( plik.good() == true && wynik.good() == true )
    {
        cout << "Aby zaczac wcisnij dowolna litere oraz enter.\n";
        cin >> x;
        cin.clear();
        cin.sync();
        start = time( NULL );
        while( !plik.eof() )
        {
            getline( plik, linia );
            cout << linia << endl;
            getline( cin, odp );
            wynik <<( odp + "\n" );
        }
        czas = time( NULL ) - start;
        plik.close();
        wynik.close();
        porownanie();
        cout << "Poprawnie napisano " << pkt << " na " << all << " wyrazow.\n";
        cout << "Calkowity czas wykonywania zadania wyniosl: " << czas << " sekund.\n";
    }
    else cout << "Brak dostepu do pliku!";
   
}
[ \c pp ]
P-85241
DejaVu
» 2013-06-09 16:52:17
Skoro otrzymujesz taki komunikat to znaczy, że piszesz po nieswojej pamięci lub próbujesz odczytywać nieswoją pamięć.
P-85259
kinga9650
Temat założony przez niniejszego użytkownika
» 2013-06-09 18:02:04
A jak mogę to zmienić? Znaleźć miejsce w którym zapisuję coś/ odczytuję z nieswojej pamięci?

Może jest jakieś miejsce, gdzie często zdarzają się takie błędy ;>
P-85264
DejaVu
» 2013-06-09 18:23:56
Skompiluj program pod Visual C++ i uruchom w trybie debugowania - Visual C++ sam Ci wykryje to miejsce.
P-85265
kinga9650
Temat założony przez niniejszego użytkownika
» 2013-06-19 19:27:59
A jest jakiś łatwy program na przerzucenie programu napisanego w C::B do Visual?
P-85827
pekfos
» 2013-06-19 19:47:21
MinGW, który zapewne masz pod C::B, też posiada debugger.
P-85828
« 1 »
  Strona 1 z 1