无法初始化链表

时间:2016-04-14 20:36:48

标签: c linked-list stack

我尝试使用链接列表构建堆栈,但我的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;
}

1 个答案:

答案 0 :(得分:1)

从main方法中调用函数linkedListStackInit并将堆栈传递给它。但是在将内存传递给linkedListStackInit函数之前,您还没有为s分配内存。函数linkedListStackInit也不分配内存,并尝试为其“firstlink”成员分配值。尝试在linkedListStackInit函数中执行以下操作,看看是否可以继续。

s = malloc(sizeof(struct LinkedListStack));