包含节点的简单C编程代码运行但在代码块上创建错误

时间:2016-09-21 19:13:56

标签: c nodes codeblocks

//此程序创建一个带有2个指针变量的结构节点,一个机场和一个指向另一个节点的链接。它只是连接多伦多,迈阿密和波士顿机场,并通过一个循环打印出来。代码工作,但我得到point.exe停止工作。我拍了一张照片。https://gyazo.com/e58ba30ea0da3e8039ad445fb3128d21

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

typedef struct node{
    char * AIRPORT[4];
    struct node * LINK;

} nodez;

int main (){
    nodez *J,*K;
    J = malloc(sizeof(nodez));
    if (J == NULL){
        return 1;

    }
    strcpy(J->AIRPORT, "TOR");
    J->LINK = malloc(sizeof(nodez));
    if (J -> LINK == NULL){
        return 1;

    }
    strcpy(J->LINK->AIRPORT, "MIA");
    J->LINK->LINK = malloc(sizeof(nodez));
    if (J -> LINK -> LINK == NULL){
        return 1;

    }
    strcpy(J->LINK-> LINK -> AIRPORT, "BOS");

    nodez *current = J;
    while (current){
        printf("%s\n", current -> AIRPORT);
        current = current -> LINK;

    }
    return 0;
}

这是我得到的照片

1 个答案:

答案 0 :(得分:1)

AIRPORT结构的nodez成员应定义为char AIRPORT[4];,因为当前定义它是指向char的4指针数组。编译器会生成不应忽略的警告。

此外,您构建了一个链接节点列表,但忘记将最后一个节点的LINK设置为NULLmalloc()返回未初始化的内存,LINK成员可能包含无效的地址,在遍历列表时调用未定义的行为。

通过在最后J->LINK->LINK->LINK = NULL;之后设置strcpy()来修复它。