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

10-11 18:56