Naučit se SQL Naučit se SQL
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací

Diskuze: Zvětšování pole během spuštěného programu

C a C++ C a C++ Zvětšování pole během spuštěného programu American English version English version

Aktivity (1)
Avatar
Kubas129
Člen
Avatar
Kubas129:2.12.2018 19:00

Ahoj, mám dotaz dá se dynamické pole postupně zvětšovat během zapnutého programu?
Díky

 
Odpovědět 2.12.2018 19:00
Avatar
Jirka
Člen
Avatar
Odpovídá na Kubas129
Jirka:2.12.2018 19:19

Ahoj,

můžeš použít vektor<> ze standartní knihovny. Tedy pokud programuješ v C++.

Nahoru Odpovědět 2.12.2018 19:19
Kdo nic nedělá, nic nezkazí.
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Kubas129
DarkCoder:2.12.2018 19:30

Samozřejmě že ano. Využíváš funkci realloc() ze standardní knihovny stdlib.h.

Prototyp funkce je:
void *realloc(void *ptr, size_t size);

kde:

ptr je ukazatel na blok paměti dříve alokovaný pomocí malloc() nebo calloc(). Pokud je NULL, je alokován nový blok a funkce na něj vrací ukazatel.

size je nová velikost pole. Pokud je 0 a ptr ukazuje na existující blok paměti, je tento blok paměti uvolněn a funkce vrací NULL.

Funkce vrací ukazatel na nově alokovaný blok paměti. Při selhání vrací NULL.

Př:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
        char *str;

        // Alokace pameti
        str = (char *)malloc(10);
        strcpy(str, "ITnetwork");
        puts(str);

        /* Realokovani pameti */
        str = (char *)realloc(str, 15);
        strcat(str, ".cz");
        puts(str);

        free(str);

        return(0);
}
Nahoru Odpovědět 2.12.2018 19:30
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Jirka
Člen
Avatar
Odpovídá na Kubas129
Jirka:2.12.2018 19:40

Něco jako:

#include <vector>

using namespace std;

int main(void) {
vector<string> mujVektor;

atd.
}
Editováno 2.12.2018 19:41
Nahoru Odpovědět 2.12.2018 19:40
Kdo nic nedělá, nic nezkazí.
Avatar
Kubas129
Člen
Avatar
Kubas129:2.12.2018 19:44

Vektory máme zakázaný :( ale díky za tip s tím realloc jdu to s ním zkusit :-)

 
Nahoru Odpovědět 2.12.2018 19:44
Avatar
Caster
Člen
Avatar
Caster:4.12.2018 2:04

Proč zvětšovat pole, když můžeš rovnou alokovat několik GB paměti pomocí VirtualAlloc viz příklad pro načtení celého TXT souboru do paměti pro jeho další zpracování:

//* Alokujeme pamět pro celý soubor *//
        static const SIZE_T giga = 1024 * 1024 * 1024;
        static const SIZE_T size = 5 * giga;
        ptr = static_cast<BYTE*>(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE));
        bsrc = ptr;
 
Nahoru Odpovědět 4.12.2018 2:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.