Diskuze: Zvětšování pole během spuštěného programu
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
můžeš použít vektor<> ze standartní knihovny. Tedy pokud programuješ v C++.
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);
}
Něco jako:
#include <vector>
using namespace std;
int main(void) {
vector<string> mujVektor;
atd.
}
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;
Zobrazeno 6 zpráv z 6.