Chyba czegoś nie ogarniam ze wskaźnikami... ktoś mógłby mi wskazać błąd?
head.h
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
typedef struct dane Dane;
typedef struct lista Lista;
void clearIn();
void endl();
void init(Lista *);
void addBegining(Lista *);
#endif // HEAD_H_INCLUDED
fn.c
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
struct dane {
char *imie, * nazwisko;
int pesel;
Dane *next, *prev;
};
struct lista {
Dane *head, *tail;
unsigned count;
};
void clearIn(){
while(getchar()!='\n');
}
void endl(){
printf("\n");
}
void init(Lista * start) {
start -> head = NULL;
start -> tail = NULL;
start -> count = 0;
}
void addBegining(Lista *lista) {
Dane *element = (Dane*)malloc(sizeof(Dane));
char *imie = (char*)malloc(64*sizeof(char));
printf("Podaj imie: ");
gets(imie);
char *nazwisko = (char*)malloc(64*sizeof(char));
printf("Podaj nazwisko: ");
gets(nazwisko);
int pesel;
scanf("%d", &pesel);
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
int main()
{
Dane *my_list;
Lista *start;
init(start);
printf("Lista dwukierunkowa\n\n");
printf("a. dodaj do listy\tb. wyswietl liste\n");
switch(getchar()){
case 'a':
case 'A':
addBegining(start);
break;
}
}
Chodzi mi knokretnie o funkcję init. Która ma inicjalizować listę. W mainie tworzę wskaźnik start i chcę przekazać go do funkcji który zainicjalisuje tą listę zerami. Jednak po włączeniu program crashuje.
Inna sprawa to w funkcji main chciałem zrobić coś takiego:
Lista *start = (Lista*)malloc(sizeof(Lista);
to dostaję zwrot z kompilatora:
"error: invalid application of 'sizeof' to incomplete type 'Lista {aka struct lista}'|"
Jak to ogarnąć? Co robię źle ;/?
EDIT. Może zdąże zanim ktos przeczyta:
char *imie = (char*)malloc(64*sizeof(char));
Takie cudo.... czy muszę tam określać że ma wielkość 64? Jak bym zrobił np.
char *imie = (char*)malloc(sizeof(char));
to czy program sam będzie dostosowywać wielkość w zależności od tego co wpiszę? Czy raczej może być to niebezpieczne?