Witam, mam problem z listami i wskaźnikami w C. Struktura listy wyglada tak:
typedef struct sl {
char slowo[30];
struct sl* dalej;
}* lista;
mam napisać funkcje dodająca wyrazy do listy, tak aby dodany wyraz był na początku listy. Do tej pory naskrobałem coś takiego:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct sl {
char slowo[MAX_DL_SLOWA];
struct sl* dalej;
}* lista;
lista dolacz(char slow[30], lista lis) { // dolacza slowo do poczatku listy lis
lista pom = (lista)(malloc(sizeof(struct sl)));
lista nowy = (lista)(malloc(sizeof(struct sl))); //tworze nowa komórke
pom=lis->dalej; //pom trzyma adres który byl wczesniej jako pierszy
lis->dalej=nowy; //nowy ma byc pierszy
strcpy(nowy->slowo,slow); // przepisanie slow do nowej
nowy->dalej=pom; //nowa ma adres do poprzedniego drugiego elementu
free(pom);
return nowy;
}
void druk(lista lis) {
// drukuje po kolei wszystkie slowa z lis
while (lis != NULL) {
printf(" %s\n", lis->slowo);
lis = lis->dalej;
}
}
int main () {
lista lis = NULL;
dolacz("123",lis);
lis = dolacz("abc", dolacz("def", dolacz("ghi", lis)));
druk(lis);
return 0;
}
i błąd ukazuje sie w funkcji dolacz()
. treść błędu:
Naruszenie Ochrony Pamięci (core dumped)
Zdaje mi się ze błąd polega na przypisaniu wskaźników . Tylko nie wiem jak go rozwiązać.
Pozdrawiam