[C++] Sprawdzenie poprawnosci kodu

soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: soku11 »

WITAM!
Mam taki oto kod, ktory tworzy dynamicznie tablice o zadanych wymiarach:

Kod: Zaznacz cały

/ Funkcja rezerwuje pamiec na dwuwymiarowa tablice o danych ww x hh
int **make_tab( unsigned ww, unsigned hh )
{
  int **tmp = NULL;

  tmp = new int *[ ww ];

  if( !tmp )
  {
    cout << "Blad allokacji pamieci! Aplikacja zostanie wylaczona!" << endl;
    cin.ignore();
    exit( 1 );
  }

  for( unsigned i=0; i<ww; i++ )
  {
    tmp[ i ] = new int[ hh ];
    if( !tmp )
    {
      cout << "Blad allokacji pamieci! Aplikacja zostanie wylaczona!" << endl;
      cin.ignore();
      exit( 1 );
    }
  }

  for( unsigned i=0; i<ww; i++ )
    for( unsigned j=0; j<hh; j++ )
      tmp[ i ][ j ] = 0;

  return tmp;
}
Czy ten kod jest zgodny ze standardem i w miare oprymalny?? I jeszcze drugi kod funkcji, ktora ma usunac zadana tablice:

Kod: Zaznacz cały

// Usuwa utworzona tablice dwuwymiarowa
void del_tab( int **tab, unsigned ww )
{
  if( tab )
  {
    for( unsigned i=0; i<ww; i++ )
      delete [] tab[i];
    delete *[] tab;
  }
}
Czy wszystko jest ok?? POZDRO
Xitami

[C++] Sprawdzenie poprawnosci kodu

Post autor: Xitami »

to co robisz nie jest tablicą dwuwymiarową, to jest wektor wskaźników do wektorów liczb całkowitych. Niby wygląda tak samo. Czy dobrze? Może, nie wiem.
temp=new int [hh * ww]; o! To jest tablica dwuwymiarowa, choć wygląda inaczej, temp[i*ww+j] zamiast temp[j].
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: kadiii »

Nie, tu się pozwolę nie zgodzić. Taki wskaźnikowy sposób zapisu tablicy dwuwymiarowej jest jak najbardziej dobry i odnoszący się do tablicy dwuwymiarowej i w tym rozumieniu jest tożsamy z twoim pojęciem wektora. Twój natomiast sposób jest raczej wykorzystaniem własności, którą uzyskujemy naturalnie dzięki wskaźnikom i uzyskując tym samym możliwość równoległego zapisu z operatorem [], który twój zapis oczywiście wyklucza. Podsumowując, taki zapis wskaźnikowy jest jak najbardziej standardowym zapisem tablicy wielowymiarowej. Pozdro
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: soku11 »

A czy dobrze kasuje ta tablice wskaznikow?? Tzn czy tam przy tym drugim delete powinna byc gwiazdka, czy nie?? POZDRO
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: kadiii »

Bez gwiazdki, chcesz przecież zwolnic w tym miejscu pamiięć z tablicy wykreowanej przez wskażnik **tab czyli nie różni się to niczym od tablicy wykreowanej przez *tab - na takiej płaszczyźnie zmienna "zwykła" i zmienna wskaźnikowa niczym się nie różnią.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: soku11 »

Ok wielkie dzieki Teraz juz wszystko jasne. POZDRO
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: Rafal88K »

Popraw destruktor:

Kod: Zaznacz cały

    for(unsigned i = 0; i < ww; ++i)
      delete[] tab[i];
    delete [] tab; 
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: soku11 »

Dzieki, ale jakbys przeczytal to byc zobaczyl, ze mi juz slownie poprawili POZDRO
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

[C++] Sprawdzenie poprawnosci kodu

Post autor: Rafal88K »

No tak sorry, nie widziałem kodu więc napisałem, ale kadiii już to napisał
ODPOWIEDZ