Wskażnik do tablicy zwracany przez funkcje
Ostatnio zmodyfikowano 2013-01-13 18:37
Karol_14 Temat założony przez niniejszego użytkownika |
Wskażnik do tablicy zwracany przez funkcje » 2013-01-13 16:20:17 Zacząłem pisać prosty program do marge sort. To narazie połowa pracy ale napotkałem problem którego nie potrafie wyjaśnić. pokaże na przykladach. #include <iostream> using namespace std;
int * scal( int lewa[], int prawa[], int dlugoscL, int dlugoscP ) { int posortowane[ dlugoscL + dlugoscP ]; int i = 0, j = 0, k = 0; while( k < dlugoscP + dlugoscL ) { if( prawa[ i ] < lewa[ j ] ) { posortowane[ k ] = prawa[ i ]; i++; k++; } else { posortowane[ k ] = lewa[ j ]; j++; k++; } } while( j < dlugoscL ) { posortowane[ k ] = lewa[ j ]; j++; k++; } while( i < dlugoscP ) { posortowane[ k ] = prawa[ i ]; i++; k++; } return posortowane; }
int main() { int tab1[ 5 ] = { 1, 3, 6, 78, 234 }; int tab2[ 5 ] = { - 54, 8, 43, 231, 867 }; int * wynik = scal( tab1, tab2, 5, 5 ); for( int i = 0; i < 10; i++ ) cout << wynik[ i ] << endl; }
w środku funkcji tablice ładnie się sortują, zwraca wskaźnik do tej tablicy, ale jak już mam ją odczytać to poprawnie pokazuje tylko pierwszy element(i to też tylko jednokrotnie mogę go odczytać, później jakby zmienia się wartość). Gdy wyśle tablice jako argument funkcji wszystko działa poprawnie: #include <iostream> using namespace std;
int * scal( int lewa[], int prawa[], int dlugoscP, int dlugoscL, int posortowane[] ) { int i = 0, j = 0, k = 0; while( k < dlugoscP + dlugoscL ) { if( prawa[ i ] < lewa[ j ] ) { posortowane[ k ] = prawa[ i ]; i++; k++; } else { posortowane[ k ] = lewa[ j ]; j++; k++; } } while( i < dlugoscL ) { posortowane[ k ] = lewa[ i ]; k++; i++; } while( j < dlugoscP ) { posortowane[ k ] = prawa[ j ]; j++; k++; } return posortowane; }
int main() { int tab1[ 5 ] = { 1, 3, 6, 78, 234 }; int tab2[ 5 ] = { 0, 8, 43, 231, 867 }; int wynik[ 10 ]; scal( tab1, tab2, 5, 5, wynik ); for( int i = 0; i < 10; i++ ) cout << wynik[ i ] << endl; }
Mógłby mi ktoś powiedzieć czemu tak się dzieje? To bardzo irytujący problem |
|
DejaVu |
» 2013-01-13 18:37:30 Zwracasz adres do zmiennej lokalnej, która przestaje istnieć z chwilą wyjścia z funkcji. To jest standardowe i prawidłowe zachowanie C++. |
|
« 1 » |