Nejste přihlášen/a.
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 |

2x
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;
}
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.