我正在尝试使用链接列表构建堆栈,但是在我的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
链表
#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;
}
最佳答案
从您的主要方法中,您正在调用函数linkedListStackInit,并将堆栈传递给该函数。但是在将内存传递给linkedListStackInit函数之前,您尚未为分配内存。函数linkedListStackInit也不会分配内存,而是尝试为其“ firstlink”成员分配一个值。尝试在linkedListStackInit函数中执行以下操作,看看是否可以继续进行。s = malloc(sizeof(struct LinkedListStack));
关于c - 无法初始化链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36633496/