“节点”之前的预期表达。

时间:2015-11-09 04:42:50

标签: c

我一直在用C中的链表实现搞乱,并且遇到了这个问题:为什么它在以下几行中给我expected expression before 'Node'?:

Node *newNode1= malloc(sizeOf(Node));
Node *newNode2= malloc(sizeOf(Node));
Node *newNode3= malloc(sizeOf(Node));
Node *newNode4= malloc(sizeOf(Node));

我之前从未在C中遇到过这样的问题。什么地方出了错 ? 的 Code

#include <stdio.h>
#include <stdlib.h>

typedef struct Node_{
    int data;
    struct Node_ *next;
}Node;

void insertNodeBegin(Node **head, Node *newNode){
    if((*head)==NULL){
        (*head)->next = NULL;
        *head = newNode;
    }
    else{
        newNode->next = (*head)->next;
        (*head)->next = newNode;
    }
}

void printList(Node *head){
    Node *current = head;
    while(current != NULL){
        printf("%d ", current->data);
        current = current->next;
    }
}

int main()
{
    Node *head = NULL;

    Node *newNode1= malloc(sizeOf(Node));
    newNode1->data = 12;

    Node *newNode2 = malloc(sizeOf(Node));
    newNode2->data = 16;

    Node *newNode3 = malloc(sizeOf(Node));
    newNode3->data = 55;

    Node *newNode4 = malloc(sizeOf(Node));
    newNode4->data = 8;

    insertNodeBegin(&head, newNode1);
    insertNodeBegin(&head, newNode2);
    insertNodeBegin(&head, newNode3);
    insertNodeBegin(&head, newNode4);

    printList(head);

    return 0;
}

2 个答案:

答案 0 :(得分:9)

sizeOf(Node)应为sizeof(Node),请注意小o。毕竟这是C,而不是Java。 :)

答案 1 :(得分:0)

如果insertNodeBegin()中的命令简而言之,请重新排序

if(*head == NULL){
    *head = newNode;
    (*head)->next = NULL;
}

因为在程序头的第一次执行中指向NULL,因此我们没有分配任何内存。由于首次执行的头部未使用head -> next指向节点位置,因此会在运行时导致分段错误。

在使用malloc()创建节点时,必须检查内存分配是否成功。为此,我使用了createNode()函数。

我们检查Node的内存分配是否正常,然后将该Node添加到列表中。最后使用void作为main( void )参数。

更改后,您的代码将变为

代码

#include <stdio.h>
#include <stdlib.h>

typedef struct Node_{
    int data;
    struct Node_ *next;
}Node;


void insertNodeBegin(Node **head, Node *newNode){

    if(*head == NULL){
        *head = newNode;
        (*head)->next = NULL;
    }
    else{
        newNode->next = (*head)->next;
        (*head)->next = newNode;   
    }
}

void printList(Node *head){
    Node *current = head;
    while(current != NULL){
        printf("%d ", current->data);
        current = current->next;
    }
}

int createNode(Node **node, int value){

    *node = malloc(sizeof(Node));

    if(*node){
        (*node)->data = value;
        return 1;
    }else{
        fprintf(stdout, "%s", "can't allocate ...\n");
        return 0;
    }

}

int main(void)
{
    Node *head = NULL;

    Node *newNode1;  
    Node *newNode2;
    Node *newNode3;  
    Node *newNode4;

    if(createNode(&newNode1, 12)) {
        insertNodeBegin(&head, newNode1);
    }

    if(createNode(&newNode2, 16)) {
        insertNodeBegin(&head, newNode2);
    }

    if(createNode(&newNode3, 55)) {
        insertNodeBegin(&head, newNode3);
    }

    if(createNode(&newNode4, 8)) {
        insertNodeBegin(&head, newNode4);
    }


    printList(head);

    return 0;
}