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

Reallocowanie pamięci tablicy dwuwymiarowej

Ostatnio zmodyfikowano 2014-02-03 17:49
Autor Wiadomość
Plachu
Temat założony przez niniejszego użytkownika
Reallocowanie pamięci tablicy dwuwymiarowej
» 2014-02-03 17:49:14
Więc sprawa ma się tak, jest tutaj funkcja przydzielająca pamięć dla struktury i nie mam pewności co do deklaracji pamięci dotyczącej tablicy łańcuchów, mógłby ktoś przejrzeć i powiedzieć czy jest ona dobrze wykonana?

int val - jest to numer łańcucha
char *buff jest to tablica, w której przekazuje łańcuch, dla którego chcę zadeklarować odpowiednio dużo miejsca
na koniec po przydzieleniu przypisuję odpowiednie wartości do danych elementów struktury i zwracam

C/C++
struct produkt * przydzielpamiecproduktu( struct produkt * kupno, int val, float cena, unsigned short kod, int oznaczenie, char * buff )
{
    char ** prt1;
    int * prt2;
    float * prt3;
    unsigned short * prt4;
    int i, size;
    size = strlen( buff );
    if( kupno == NULL )
    {
        kupno =( struct produkt * ) calloc( 1, sizeof( struct produkt ) );
        if( kupno == NULL )
        {
            printf( "Błąd przydzielania pamięci!\n" );
            return 0;
        }
    }
    prt1 =( char ** ) realloc(( kupno->nazwaproduktu ),( val + 1 ) * sizeof( char * ) );
    if( prt1 == NULL )
    {
        printf( "Błąd przydzielania pamięci!" );
        free( kupno );
        return 0;
    }
    for( i = 0; i < strlen( buff ); i++ )
    {
        prt1[ i ] =( char * ) realloc(( kupno->nazwaproduktu ),( size ) * sizeof( char ) ) );
        if( prt1[ i ] == NULL )
        {
            printf( "Błąd przydzielania pamięci!\n" );
            free( kupno );
            return 0;
        }
    }
    prt2 =( int * ) realloc(( kupno->oznaczenie ),( val + 1 ) * sizeof( int ) );
    if( prt2 == NULL )
    {
        printf( "Błąd przedzielania pamięci!" );
        free( prt1 );
        free( kupno );
        return 0;
    }
    prt3 =( float * ) realloc(( kupno->cenaproduktu ),( val + 1 ) * sizeof( float ) );
    if( prt3 == NULL )
    {
        printf( "Błąd przydzielania pamięci!" );
        free( prt1 );
        free( prt2 );
        free( kupno );
        return 0;
    }
    prt4 =( unsigned short * ) realloc(( kupno->kodproduktu ),( val + 1 ) * sizeof( unsigned short ) );
    if( prt4 == NULL )
    {
        printf( "Błąd przydzielania pamięci!" );
        free( prt1 );
        free( prt2 );
        free( prt3 );
        free( kupno );
        return 0;
    }
    kupno->nazwaproduktu = prt1;
    for( i = 0; i < size; i++ )
    {
        kupno->nazwaproduktu[ val ][ i ] = buff[ i ];
    }
    kupno->oznaczenie = prt2;
    kupno->oznaczenie[ val ] = oznaczenie;
    kupno->cenaproduktu = prt3;
    kupno->cenaproduktu[ val ] = cena;
    kupno->kodproduktu = prt4;
    kupno->kodproduktu[ val ] = kod;
    return( kupno );
}
P-103924
« 1 »
  Strona 1 z 1