Ahoj,
snažím se dynamicky alokovat dvojrozměrné pole charů mimo blok funkce, kde jsem pole deklaroval. Ale hází mi to neustále Segmentation fault.
Kód, kde pole zvětšuju ve stejné funkci, kde jsem pole deklaroval, se bez problému zkompiluje.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int NactiZeme(){
char ** jmena;
jmena = (char **)malloc(1*sizeof(jmena));
int i, pocet = 0;
for (i = 0; i != 100; i++){
jmena = (char **)realloc(jmena, ((pocet)+1)*sizeof(jmena));
jmena[pocet] = malloc(10*sizeof(jmena[pocet]));
strcpy(jmena[pocet], "ZKOUSKA");
pocet = (pocet)+1;
}
for (i = 0; i != 100; i++){
printf("%s\n", jmena[i]);
free(jmena[i]);
}
free(jmena);
}
int main(int argn, char ** argv){
NactiZeme();
}
Naproti tomu kód, kde pole předávám funkci zvetsi, nefunguje.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void zvetsi(char ** jmena, int * pocet){
jmena = (char **)realloc(jmena, ((*pocet)+1)*sizeof(jmena));
jmena[*pocet] = malloc(10*sizeof(jmena[*pocet]));
strcpy(jmena[*pocet], "ZKOUSKA");
*pocet = (*pocet)+1;
}
int NactiZeme(){
char ** jmena;
jmena = (char **)malloc(1*sizeof(jmena));
int i, pocet = 0;
for (i = 0; i != 100; i++){
zvetsi(jmena, &pocet);
}
for (i = 0; i != 100; i++){
printf("%s\n", jmena[i]);
free(jmena[i]);
}
free(jmena);
return 0;
}
int main(int argn, char ** argv){
NactiZeme();
}
Poradí mi prosím někdo, co dělám ve druhé variantě špatně?
Děkuji