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

problem z dynamicznym alokowaniem tablicy - usuwanie elementow

Ostatnio zmodyfikowano 2017-03-11 18:04
Autor Wiadomość
mikewazowski
Temat założony przez niniejszego użytkownika
problem z dynamicznym alokowaniem tablicy - usuwanie elementow
» 2017-03-11 17:24:42
funkcja delete [] tablica nie usuwa kilku ostatnich elementow tablicy, funkcje sortowania, generowania liczb pseudolosowych działają prawidłowo więc nie zamieszczam kodu
C/C++
void wyswietltab( int tab[], int ile )
{
    for( int i = 0; i <= ile; i++ )
   
    {
       
        cout << "element " << i << " tablicy: " << tab[ i ] << endl;
    }
   
}
int main()
{
    srand( time( NULL ) );
    int ile;
    cout << "ile elementow w ciagu: " << endl;
    cin >> ile;
    ile = ile - 1;
    int * tablica = new int[ ile ];
   
    cout << "ciąg wygenerowany pseudolosowo" << endl;
    ciag_psudolos( tablica, ile ); // funkcja zapisuje do tablicy losowe liczby
   
    cout << "bubble sort" << endl;
    bubble( tablica, ile ); // sortowanie tablicy
    wyswietltab( tablica, ile ); // funkcja wyswietlajaca elementy tablicy
   
   
    delete[] tablica;
   
    cout << "test oproznienia tablicy" << endl;
    wyswietltab( tablica, ile );
   
    return 0;
}
P-158852
Bielan
» 2017-03-11 17:41:26
1. Na jakiej podstawie twierdzisz, że nie usuwa?
2. Dlaczego odczytujesz tablicę po jej usunięciu (niedozwolone)?
3. Dlaczego przekraczasz zakres tablicy
i <= ile
?
P-158854
maly7
» 2017-03-11 17:52:05
To co wyżej oraz dodatkowo:
Nie możesz zobaczyć czy usuwa Ci tablice na podstawie jej wyświetlenia.
Jeśli utworzysz tablicę 4 elementową:
int * tablica = new int[ 4 ];

Zawsze możesz (spróbować) wyświetlić element 8.:
cout << tablica[ 8 ];

Ale to już nikt nie wie co program wyświetli i czy się nie wywali.

Dlatego często, żeby nie usuwać tej samej tablicy przypadkowo, należy usunąć wskaźnik do niej:
C/C++
delete[] tablica;
tablica = 0;
P-158856
Bielan
» 2017-03-11 17:54:10
@maly7,

jeżeli już chcemy zastosować dobre praktyki to może
C/C++
tablica = nullptr;
P-158857
maly7
» 2017-03-11 17:59:14
nullptr pojawiło się chyba od standardu C++11. Jeśli nie korzysta się z tego standardu to chyba poprawne jest zastosowanie zamiast "nullptr" 0? Chyba, że się mylę :D
P-158859
Bielan
» 2017-03-11 18:04:59
@maly7,

Odpowiedź dotyczy aktualnego standardu, nie ma sensu na siłę się trzymać C++03. Jeżeli chodzi o wersje sprzed C++11 to mamy
NULL
, który może się różnić pomiędzy kompilatorami ponieważ jest
implementation-defined
. Jedną z jego implementacji może być
0
, ale nie jest to regułą.
P-158860
« 1 »
  Strona 1 z 1