[C++, błąd aplikacji] Requested the Runtime to terminate it in an unusual way
Ostatnio zmodyfikowano 2013-06-19 19:47
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: #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) #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 ] |
|
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ęć. |
|
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 ;> |
|
DejaVu |
» 2013-06-09 18:23:56 Skompiluj program pod Visual C++ i uruchom w trybie debugowania - Visual C++ sam Ci wykryje to miejsce. |
|
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? |
|
pekfos |
» 2013-06-19 19:47:21 MinGW, który zapewne masz pod C::B, też posiada debugger. |
|
« 1 » |