problem z dynamicznym alokowaniem tablicy - usuwanie elementow
Ostatnio zmodyfikowano 2017-03-11 18:04
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 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 ); cout << "bubble sort" << endl; bubble( tablica, ile ); wyswietltab( tablica, ile ); delete[] tablica; cout << "test oproznienia tablicy" << endl; wyswietltab( tablica, ile ); return 0; }
|
|
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 ? |
|
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: delete[] tablica; tablica = 0; |
|
Bielan |
» 2017-03-11 17:54:10 @maly7, jeżeli już chcemy zastosować dobre praktyki to może |
|
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 |
|
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łą. |
|
« 1 » |