Reallocowanie pamięci tablicy dwuwymiarowej
Ostatnio zmodyfikowano 2014-02-03 17:49
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 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 ); }
|
|
« 1 » |