[C++] program się kompiluje, ale zaraz potem informacja Windowsa: "Program przestał działać"
Ostatnio zmodyfikowano 2013-11-12 22:32
k44tajemnicza Temat założony przez niniejszego użytkownika |
[C++] program się kompiluje, ale zaraz potem informacja Windowsa: "Program przestał działać" » 2013-11-11 22:47:02 Uprzedzam, że jestem początkującą w temacie c++ :) Program, z którym mam problem: #include<iostream> #include<cmath>
using namespace std;
int main( int argc, char * argv[] ) { double x =* argv[ 1 ]; double b =* argv[ 2 ]; double * t = new double[( int ) x ]; int j = 0; int * p =& j; double reszta; int * iloraz; for( int i = 0; x; ) { reszta = remquo( x, b, iloraz ); t[ i ] = reszta; x =* iloraz; j++; } int z =* p; for( int i = z; i > 0; i-- ) cout << t[ i - 1 ] << endl; delete[] t; }
Jeśli to przeczytałeś, to dziękuję za poświęcony czas :)[/i] |
|
Mrovqa |
» 2013-11-11 23:25:17 double x =* argv[ 1 ]; double b =* argv[ 2 ];
1. Odwołujesz się do elementów w tablicy nie sprawdzając ile ich jest (to prawdopodobnie powoduje crasha). 2. argv jest tablicą stringów. Przy odwołaniu argv[x] otrzymujesz string, po czym pobierasz jego zerowy znak przy pomocy gwiazdki (tablice indeksujemy od zera!), a więc do zmiennej double przypisujesz kod ASCII danego znaku. int j = 0; int * p =& j;
int z =* p;
for( int i = z; i > 0; i-- ) cout << t[ i - 1 ] << endl;
W między czasie nie modyfikujesz zmiennej j, na którą wskazuje wskaźnik p. Do zmiennej z później przypisujesz to, na co wskazuje owy wskaźnik, czyli 0. Warunek pętli za pierwszym razem wygląda więc tak: 0>0, a więc fałsz. Polecam zacząć od podstaw i nie gonić do przodu, tylko cierpliwie próbować zrozumieć wszystko po kolei. |
|
k44tajemnicza Temat założony przez niniejszego użytkownika |
» 2013-11-12 08:50:26 Dziękuję :) W ramach poprawki pod mainem wpisałam: int m1, n1; int * m =& m1; int * n =& n1;
int i = argc; cout << i << endl;
if( argc >= 2 ) { char m2 =* argv[ 0 ]; char n2 =* argv[ 1 ]; double m1 = m2 - '0'; double n1 = n2 - '0'; }
double x =* m; int b =* n; W kwestii j: inkrementuję go w pętli for: for( int i = 0; x; ) { reszta = remquo( x, b, iloraz ); t[ i ] = reszta; x =* iloraz; j++; } |
|
Monika90 |
» 2013-11-12 09:13:42 int * iloraz; reszta = remquo( x, b, iloraz );
iloraz to niezainicjalizowany wskaźnik, wywołanie remquo z takim wskaźnikiem wywala program. W ogóle w nieprawidłowy sposób używasz prametrów wyjściowych (czyli 3-go parametru remquo), powinno być: int iloraz; reszta = remquo( x, b, & iloraz );
Tzn, zamiast * w deklaracji powinno być & w wywołaniu. Poza tym, warunek w pętli for jest bez sensu. |
|
k44tajemnicza Temat założony przez niniejszego użytkownika |
» 2013-11-12 22:32:58 Cześć, dziękuję za te uwagi:)
Co do warunku w pętli for - jeśli x jest 0, to jest fałszem, co kończy pętlę (pomysł wzięty z wykładu). |
|
« 1 » |