• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ Rozszerzanie tablicy (czy ten kod jest poprawny?)

Object Storage Arubacloud
+1 głos
1,224 wizyt
pytanie zadane 21 czerwca 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)

Witam, stworzyłem taki kod i chciałem się spytać o jego poprawność.

Stworzyłem zmienne globalne co niektórym może się nie spodobać. Zwykle nie daje globalnych ale trudno.

#include <iostream>

using namespace std;

int il=9;
int *tablica = new int[9];

void przestaw(int x)
{
    int *sch = new int[il];

    for(int i=0;i<=il;i++)
    {
        sch[i] = tablica[i];
    }

    tablica = new int[x];
    il = x;

    for(int i=0;i<=il;i++)
    {
        tablica[i] = sch[i];
    }
}

int main()
{
    tablica[0]=0;
    tablica[1]=1;
    tablica[2]=2;
    tablica[3]=3;
    tablica[4]=4;
  
    for(int i=0;i<=4;i++)
        cout<<tablica[i]<<endl;

    cout<<endl;
    przestaw(16);


    for(int i=0;i<=15;i++)
    {
        cout<<tablica[i]<<endl;
    }
    return 0;
}

Czy takie wydłużanie i skracanie tablic jest poprawne? Jest może lepszy sposób? Może wprowadzić jakąś poprawkę?

2 odpowiedzi

+2 głosów
odpowiedź 21 czerwca 2016 przez obl Maniak (51,280 p.)
wybrane 21 czerwca 2016 przez Maciek123233
 
Najlepsza

Błąd w kodzie:

    for(int i=0;i<=il;i++)

wychodzisz poza zakres tablicy dokładnie przez zapis i<=il (indeksowanie zaczyna się od 0.

A i jeszcze jedno, przydzielasz nową pamięć do zmiennej tablica a nie zwalniasz startej pamięci (będziesz miał wyciek pamięci). To samo dotyczy zmiennej tymczasowej sch przydzielasz jej pamięć a później jej nie zwalniasz.

Zacytuję tutaj Pana Mirosława: "Pamiętaj, za każdym razem jak nie zwalniasz pamięci gdzieś na świecie ginie mały kotek!" :)

komentarz 22 czerwca 2016 przez Maciek123233 Gaduła (3,400 p.)
edycja 28 czerwca 2016 przez Maciek123233
Dzięki za odpowiedź, dodałem li-1 i zwalnianie pamięci. Wystraszyłem się że to nie działa na tablicach obiektów klas, ale wszystko chodzi ;)
0 głosów
odpowiedź 21 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Możesz stworzyć tablicę dynamiczną o określonym maksymalnym rozmiarze, a następnie dodawać elementy za pomocą iteratora (zmiennej określającej aktualny rozmiar).

Podobne pytania

0 głosów
2 odpowiedzi 193 wizyt
pytanie zadane 4 stycznia 2016 w C# przez kuba7528 Obywatel (1,320 p.)
0 głosów
2 odpowiedzi 488 wizyt
pytanie zadane 31 sierpnia 2016 w JavaScript przez iozeke Obywatel (1,820 p.)
0 głosów
2 odpowiedzi 274 wizyt
pytanie zadane 3 stycznia 2017 w PHP przez Totek Użytkownik (860 p.)

92,579 zapytań

141,432 odpowiedzi

319,661 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...