Niedzialajaca alokacja pamieci po wywolaniu innej funkcji

0

Witam, mam problem z funkcja malloc, ktora po wpisaniu wartosci do "id" przestaje alokowac pamiec.
Nie wiem kompletnie dlaczego tak sie dzieje.
To na razie program testowy, wiec nie jest zbytnio idiotoodporny, ale nie o to tu chodzi.

#include<stdio.h>
#include<ctype.h>
#include<float.h>
#include<stdlib.h>

struct robol
{
    long id;
    long placa;
    char nazw[26];
    char dzial[16];
    struct robol * nastepny;
} *poczatek;

int jeden_wpis(struct robol *i);


char koniec[] = {' ', '\n', '\0'};

int main()
{
    int konczyc;
    struct robol *aktualny, *poprzedni, *pom;
    if (poczatek!=NULL) return 1;
    aktualny = malloc(sizeof(struct robol));
    poczatek = aktualny;
    printf("Adres pierwszego wpisu to %X\n", aktualny);
    while (1)
    {
        konczyc = jeden_wpis(aktualny);
        if (konczyc == 0) break;
        poprzedni = aktualny;
        aktualny = malloc(sizeof(struct robol));
        poprzedni->nastepny = aktualny;
        printf("Adres kolejnego adresu to %X\n", aktualny);
    }
    poprzedni->nastepny = NULL;
    free(aktualny);
    printf("Wpisane liczby to:\n");
    for (pom = poczatek; pom != NULL; pom = (pom->nastepny))
    {
        puts("pom->nazw");
        puts("pom->dzial");
        printf("%d\n", pom->id);
        printf("%d\n", pom->placa);
    }
    return 0;
}

int jeden_wpis(struct robol * i)
{
    printf("Podaj id\n");
    scanf("%d", i->id);
    printf("Podaj zarobki\n");
    scanf("%d", i->placa);
    getchar();
    printf("Podaj imie i nazwisko\n");
    fgets(i->nazw, 25, stdin);
    printf("Podaj dzial\n");
    fgets(i->dzial, 15, stdin);
    if (strcmp(i->nazw, koniec)==0) return 0;
    return 1;
}
0

Zdefinuj "przestaje alokować pamięć".

0

Zwraca wskaznik zerowy, ktory przy jakiejkolwiek probie zapisania danych (slusznie) wywala program.

1

Drugim parametrem scanf powinien być adres a jest wartość. Zmień na:

 scanf("%d", &(i->id));

1 użytkowników online, w tym zalogowanych: 0, gości: 1