Nejste přihlášen/a.

Přihlásit se do poradny

 

C - vnořené struktury, pole, ukazatele

Od: destik* odpovědí: 6 změna:

Zdravím, už několik hodin sedím nad domácím úkolem a pořád řeším jeden problém.
Potřebuji alokovat paměť pro pole struktur, do nichž je vnořeno další pole struktur. Tady je program:
A problém je pravděpodobně to, že se nealokuje pamět pro vnořenou strukturu (identifikátor "obj") při indexu pole *arr[i >= 1] a při druhém provedení cyklu for ve funkci test(...) program zamrzne (asi chyba paměti).
Použití dvojitého ukazatele a rovněž dané struktury dat je nutné - je to v zadání úkolu.

Jsem v programování úplně začátečník, takže tam bude asi dost nesmyslů... Budu rád za každou radu.
Děkuji.

Edit: ano, zapomněl jsem na příkaz free(), ale to teď není problém :D


program.txt 506 b

C - vnořené struktury, pole, ukazatele

 

 

6 odpovědí na otázku
Řazeno dle hodnocení

 

 

hodnocení

2x
Jeden tip, nezkoušejte dělat velkou magii na jednom řádku ale krok po kroku. Tohle není moc dobrý nápad ani když budete programování mít v ruce.
Nejsem ceckar, ale prvni chyba je ze mate pointer prvni_s a předavate jeho referenci do metody test. Není mi jasné proč. Pak tam děláte harakiri s pretypovanim. Plus nevím proč se snažíte vložit 20 prvků když máte jste alokoval místo jen na 10 prvků.
Kód níže funguje. Je tam i moje verze kde jsem zkoušel krok po kroku kde je chyba.
#include
#include
struct struct2
{
int x;
};
struct struct1
{
struct struct2 *obj;
};
void test_step_by_step(struct struct1 *arr)
{

for (int i = 0; i < 10; i++)
{
printf("i %d
",i);
struct struct2* s2 = malloc(sizeof(struct struct2));
s2->x = i + 2;
printf("%d: %d
", i, s2->x);

arr[i].obj=s2;
printf("%d: %d
", i, arr[i].obj->x);
}

}
void test(struct struct1 *arr)
{
for (int i = 0; i < 20; i++)
{
arr[i].obj = malloc(sizeof(struct struct2));
arr[i].obj->x = i + 2;
printf("%d: %d
", i, arr[i].obj->x);
}
}
int main()
{
printf("start
");
struct struct1 *prvni_s;
prvni_s = malloc(sizeof(struct struct1) * 10);
test(prvni_s);
printf("end
");
return 0;
}
Sry za formátování a chybný include, vloženo z telefonu
destik*
hodnocení

Díky moc za ochotu, mrknu na to.

 

hodnocení

1x

Ziadny program nevidim.

 

hodnocení

0x

Hlavna chyba je alokovat na riadku 28 10 x strukturu a potom spustit cyklus od 0 do 19 na riadku 16, prvky 10 az 19 nie su alokovane ...

destik*
hodnocení

Jop, to je pravda. Ale problém to neřeší, stejně se program po dvou iteracích cyklu for zastaví

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]