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ět 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.txt506 b

 

 

6 odpovědí na otázku
Řazeno dle 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*

Díky moc za ochotu, mrknu na to.

 


1x

Ziadny program nevidim.

 


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*

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]