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

Tablica dynamiczna przekazywana przez funkcję

Ostatnio zmodyfikowano 2016-03-30 20:36
Autor Wiadomość
Artik94
Temat założony przez niniejszego użytkownika
Tablica dynamiczna przekazywana przez funkcję
» 2016-03-28 15:26:38
Mam funkcję i program:
C/C++
int nowa_tablica( int * tab, int N ) {
    int * tab2; //Tworzę tablicę dynamiczną ponieważ chcę ją mieć o szerokości "N", a nie stałej
    tab2 =( int * ) malloc( N * sizeof( int ) );
    for( int i = 0; i < N; i++ ) {
        tab2[ i ] = tab[ i ] + 5;
        printf( "tab2[%d] = %d \n", i, tab2[ i ] );
    }
    return * tab2; //Zwracam tutaj "*tab2", czyli w tym przypadku będzie to WARTOŚĆ?(czy wskaźnik)
}

int main() {
    int N;
    int * tab; //Pierwsza tablica stworzona w programie
    int * tab3;
    N = 10;
    tab =( int * ) malloc( N * sizeof( int ) );
    for( int i = 0; i < 10; i++ ) {
        tab[ i ] = i;
        printf( "tab[%d] = %d \n", i, tab[ i ] );
    }
    printf( "\n\n" );
    tab3 = nowa_tablica( tab, 10 ); //Stworzenie tab3 na podstawie tab -> Pojawia się komunikat "'=': 'int *' differs in levels   of indirection from 'int'"
    for( int i = 0; i < 10; i++ ) { // Tutaj pojawia się błąd o wycieku pamięci
        printf( "tab3[%d] = %d \n", i, tab3[ i ] );
    }
Prawdopodobnie coś jest nie tak w części "tab3 = nowa_tablica(tab, 10); " . Próbowałem to zmieniać na każdy sposób, ale nie wiem jak to połączyć. Proszę o pomoc.[/i][/i]
P-146640
carlosmay
» 2016-03-28 16:20:50
tab3 jest wskaźnikiem, a funkcja zwraca "wartość" pierwszego elementu tablicy tworzonej w funkcji, nie wskaźnik.
Nijak nie da się tego pogodzić.

Zwróć wskaźnik na nową tablicę.
P-146641
Rashmistrz
» 2016-03-28 16:40:05
C/C++
return * tab2; //Zwracam tutaj "*tab2", czyli w tym przypadku będzie to WARTOŚĆ?(czy wskaźnik)
zwracasz wyłuskany wskaźnik tab2,
czyli zwracasz to na co on wskazuje.

Jeśli chciałeś zwrócić
wskaźnik bez wyłuskania go:
return tab2;


Nie zapomnij zmienić też deklaracji funkcji:
int nowa_tablica( int * tab, int N ) {

(Zwracasz wskaźnik, prawda?)
int * nowa_tablica( int * tab, int N ) {

___________________________________________________________

C/C++
tab3 = nowa_tablica( tab, 10 ); //Stworzenie tab3 na podstawie tab -> Pojawia się komunikat "'=': 'int *' differs in levels   of indirection from 'int'"
for( int i = 0; i < 10; i++ ) { // Tutaj pojawia się błąd o wycieku pamięci
    printf( "tab3[%d] = %d \n", i, tab3[ i ] );

Reszta błędów wynikała właśnie z tego...
że zwracałeś liczbę, a nie wskaźnik,
a potem wyłuskiwałeś liczbę jako wskaźnik.
(który "wskazywał" nie twoje dane)
___________________________________________

Po moich wskazówkach program u mnie wypisał:
tab[0] = 0
tab[1] = 1
tab[2] = 2
tab[3] = 3
tab[4] = 4
tab[5] = 5
tab[6] = 6
tab[7] = 7
tab[8] = 8
tab[9] = 9


tab2[0] = 5
tab2[1] = 6
tab2[2] = 7
tab2[3] = 8
tab2[4] = 9
tab2[5] = 10
tab2[6] = 11
tab2[7] = 12
tab2[8] = 13
tab2[9] = 14
tab3[0] = 5
tab3[1] = 6
tab3[2] = 7
tab3[3] = 8
tab3[4] = 9
tab3[5] = 10
tab3[6] = 11
tab3[7] = 12
tab3[8] = 13
tab3[9] = 14
P-146642
Artik94
Temat założony przez niniejszego użytkownika
» 2016-03-30 20:36:37
Ogromnie dziękuję!
P-146793
« 1 »
  Strona 1 z 1