online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define allocPersons2(persons, size) \ { \ persons = (struct person**)malloc((sizeof(struct person*) * size)); \ for (int i=0; i<size; i++) { \ persons[i] = NULL; \ } \ } struct person { char surname[50]; unsigned int wiek; struct person* descendants; unsigned int descendantsCount }; void allocPersons(struct person** persons, int size) { persons = (struct persons**)malloc((sizeof(struct persons*) * size)); for (int i=0; i<size; i++) { persons[i] = NULL; } } void zrobPotomka(struct person** parent, unsigned int idx,int size) { parent[0]->descendantsCount = parent[0]->descendantsCount+1;// z polecenia wyniki ze potomkowie beda tylko dla indeksu 1 czyli 0 parent[0]->descendants = (struct persons**)malloc((sizeof(struct persons*) * size)); // tworze tablice struktur dla potomków o rozmiarze podanym przez użytkownika struct person* descendant; descendant = (struct person*)malloc(sizeof(struct person)); strcpy(descendant->surname , parent[0]->surname);//tu uproszczenie kopiowania nazwiska descendant->wiek = parent[0]->wiek;//w końcu dopiero co utworzony ^^ freePersons(parent[idx]); }; bool ifPersonDoesntExist( struct person** persons,int i ) { if (persons[i] == NULL) { return true; } else return false; } void printAPerson(int i, struct person* person) { printf("Person(%d): %s, wiek %d\n", i, person->surname, person->wiek); } void printPersons(struct person** persons, int num) { for (int i = 0; i < num; i++) { if (persons[i] == NULL) { continue; } printAPerson(i, persons[i]); } } void createPersons(struct person** persons, int idx, const char surname[25], unsigned int wiek, int surnameLong) { persons[idx] = (struct person*)malloc(sizeof(struct person)); persons[idx]->wiek = wiek; memcpy(persons[idx]->surname, surname, surnameLong); } void freePersons(struct person** persons, int num) { for (int i = 0; i < num; i++) { if (persons[i] == NULL) { continue; } free(persons[i]); } //teraz usun pamiec dla tablicy free(persons); } int main() { struct person** persons; char w; char surname[100]; int age; int size,i=0; int idx,idxArray[size]; allocPersons(persons,size); printf("podaj ile chcesz stworzyc osob"); scanf("%d", &size); int tabOfIdx[size]; allocPersons2(persons,size); while (i < size) { printf("podaj jaką opcje wybierasz \n"); printf("a --- utwórz strukture pod wybranym indeksem \n"); printf("p --- wypisz wszystkie dane z tablicy \n"); printf("c --- utworz potomkow na bazie osoby \n"); scanf("%c", &w); switch (w) { case 'a': printf("podaj indeks do utowrzenia osoby "); scanf("%d", &idx); idxArray[i]=idx; if (ifPersonDoesntExist(persons,idx)) { printf("podaj prosze nazwisko"); scanf("%s",&surname); printf("podaj prosze oraz wiek"); scanf("%d",&age); createPersons(persons, idx, surname, age, sizeof(surname)/sizeof(surname[0])); i++; } else printf("osoba o podanym indeksie istnieje"); break; case 'c': for (int k=0 ; k< sizeof(idxArray)/sizeof(idxArray[0]); k++) { if (ifPersonDoesntExist(persons,idx)) { zrobPotomka(persons,k,size); } } break; case 'p': for (int k=0 ; k< sizeof(idxArray)/sizeof(idxArray[0]); k++) { if (ifPersonDoesntExist(persons,idx)) { printAPerson(idx,persons[i]); } } break; default: printf("dowidzenia"); } } return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue