Я пытаюсь создать стек, используя связанный список, но получаю ошибку EXC_BAD_ACCESS
в моем методе linkedListStackInit
;Не удается инициализировать связанный список
LinkedList.h
#ifndef LinkedListStack_h
#define LinkedListStack_h
#ifndef __TYPE
#define __TYPE
#define TYPE int
#define TYPE_SIZE sizeof(int)
#endif
#include <stdio.h>
struct Link;
struct LinkedListStack;
void linkedListStackInit(struct LinkedListStack *s);
void push(struct LinkedListStack *s, TYPE data);
void pop(struct LinkedListStack *s);
TYPE top(struct LinkedListStack *s);
int isEmpty(struct LinkedListStack *s);
#endif
LinkedList.c
#include <stdlib.h>
#include "LinkedListStack.h"
struct Link {
TYPE value;
struct Link *next;
};
struct LinkedListStack {
struct Link *firstLink;
};
void linkedListStackInit(struct LinkedListStack *s) {
s->firstLink = 0;
}
void push(struct LinkedListStack *s, TYPE data) {
struct Link *newLink = malloc(sizeof(struct Link));
// Assert?
newLink->next = s->firstLink;
newLink->value = data;
s->firstLink = newLink;
}
void pop(struct LinkedListStack *s) {
struct Link *temp = s->firstLink;
s->firstLink = s->firstLink->next;
free(temp);
}
TYPE top(struct LinkedListStack *s) {
return s->firstLink->value;
}
int isEmpty(struct LinkedListStack *s) {
if(s == NULL) {
return 0;
}
else {
return 1;
}
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "LinkedListStack.h"
int main(int argc, const char * argv[]) {
struct LinkedListStack *s;
linkedListStackInit(s);
return 0;
}
это поле TYPE, что вы копируете в поле значения от Link структуры больше, чем в междунар? – bruceg
В какой строке ваш отладчик говорит вам об ошибке? И тогда каковы значения любых соответствующих указателей на этой строке? Если по какой-то причине отладчик не может помочь вам найти проблему, пожалуйста, напишите [минимальный полный и проверяемый пример] (http://stackoverflow.com/help/mcve). – kaylum
Итак, я понял, что ошибка возникает, как только я пытаюсь инициализировать связанный список. Я опубликовал весь код, поэтому это должно быть более понятным. – 123