• 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?)

VPS Starter Arubacloud
+1 głos
1,321 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 199 wizyt
pytanie zadane 4 stycznia 2016 w C# przez kuba7528 Obywatel (1,320 p.)
0 głosów
2 odpowiedzi 532 wizyt
pytanie zadane 31 sierpnia 2016 w JavaScript przez iozeke Obywatel (1,820 p.)
0 głosów
2 odpowiedzi 283 wizyt
pytanie zadane 3 stycznia 2017 w PHP przez Totek Użytkownik (860 p.)

92,830 zapytań

141,771 odpowiedzi

320,817 komentarzy

62,159 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

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!

...