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

Zarządzanie pamięcią C - realloc w funkcji

Ostatnio zmodyfikowano 2018-05-15 23:58
Autor Wiadomość
desperat96
Temat założony przez niniejszego użytkownika
Zarządzanie pamięcią C - realloc w funkcji
» 2018-05-12 16:22:00
Witam, mam sobie kod który jak dla mnie działa dziwnie, albo jak zwykle robię coś źle, ale szukałem w internecie, pytałem znajomych i nikt nie powiedział czemu sie tak dzieje.

Kod
C/C++
#include <stdlib.h>
#include <stdio.h>
void red( int * );
int main()
{
    int * wsk, i;
    wsk =( int * ) malloc( 15 * sizeof( int ) );
    for( i = 0; i < 15; i++ )
    {
        wsk[ i ] = i + 100;
        printf( "%d numer wskaznika:%p \n", wsk[ i ], wsk + i );
    }
   
    printf( "\n\n" );
    red( wsk ); //wskaznik = realloc(wskaznik,20*sizeof(int));
    printf( "\n\n" );
    for( i = 0; i < 25; i++ )
    {
        printf( "%d numer wskaznika:%p \n", wsk[ i ], wsk + i );
    }
    free( wsk );
    return 0;
}
void red( int * wskaznik )
{
    int i;
    wskaznik = realloc( wskaznik, 20 * sizeof( int ) );
    for( i = 0; i < 25; i++ )
    {
        printf( "%d numer wskaznika:%p \n", wskaznik[ i ], wskaznik + i );
    }
}

Jak widać rezerwuję pamięć na 15 intów, potem je wypełniam i chcę zwiększyć rozmiar pamięci przez funkcję red, w funkcji wszystko spoko, rozmiar się zmienia, zwraca nowy wskaźnik na obszar pamięci, ale potem jak wracam do maina to zmiena *wsk ma nadal stary wskaźnik, który przecież zmieniła funkcja red, a wyświetlany jest obszar już zwolnionej pamięci, zamiast nowej. Tak jakbym przekazywał do tej funkcji wskaźnik, ona go zwalniała, ale nie przypisała nowego, tylko zostawiła stary. Męczę się z tym od wczoraj, kombinowałem na wiele sposbów, zrobiłem żeby funkcja red, zwracała nowy wskaźnik i przypisywałem go do starego, ale przecież z funkcji void dzieje się to samo, bo przekazuje wskaźnik do pamięci, a nie wartość. Jakby ktoś wiedział co jest nie tak, bo nie mogę ruszyć dalej i się tylko męcze nad tym.
P-171025
pekfos
» 2018-05-12 16:51:26
» Kurs C++ » Poziom 3Przekazywanie argumentów funkcji przez referencję lekcja
W C będziesz musiał to zrobić wskaźnikiem.
P-171028
desperat96
Temat założony przez niniejszego użytkownika
» 2018-05-12 16:55:29
Tylko że ja to robię wskaźnikiem, przekazuje wskaźnik do tej funkcji.
P-171029
pekfos
» 2018-05-12 17:04:10
A jednak dalej nie działa i dostałeś taką właśnie odpowiedź. Wróć jak zapoznasz się z podanym materiałem.
P-171031
desperat96
Temat założony przez niniejszego użytkownika
» 2018-05-12 17:11:44
dobra, wskaźnik do wskaźnika i wszystko działa, dzięki za pomoc
P-171033
desperat96
Temat założony przez niniejszego użytkownika
» 2018-05-15 22:54:03
Tylko pojawił się problem, bo zrobiłem to wszystko przez wskaźniki do wskaźników, pokazałem prowadzącemu na studiach i powiedział że nie powinienem tak robić, że sami int *wsk przekazywane do funkcji powinno zmieniać ten wskaźnik, bez używania wskaźnika do wskaźnika, bo wskaźnik jest przekazywany przez referencję. I tu jest dziwna rzecz bo na moim komputerze jak przekazuje zwykły wskaźnik, to działa źle, a na komputerze na uczelni wszystko działa dobrze. I w sumie nie wiem co robić, jeden mówi tak, drugi tak.
P-171132
pekfos
» 2018-05-15 22:59:04
Jak to kompilujesz na uczelni? I czym?
P-171133
desperat96
Temat założony przez niniejszego użytkownika
» 2018-05-15 23:01:21
codeblocksem wersja chyba 13.12, w domu mam najnowszą wersję codeblocksa, normalnie kompiluję, robię wszystko tak samo jak w domu, kod identyczny a działa inaczej.
P-171134
« 1 » 2
  Strona 1 z 2 Następna strona