//此程序创建一个带有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;
}
这是我得到的照片
答案 0 :(得分:1)
AIRPORT
结构的nodez
成员应定义为char AIRPORT[4];
,因为当前定义它是指向char
的4指针数组。编译器会生成不应忽略的警告。
此外,您构建了一个链接节点列表,但忘记将最后一个节点的LINK
设置为NULL
。 malloc()
返回未初始化的内存,LINK
成员可能包含无效的地址,在遍历列表时调用未定义的行为。
通过在最后J->LINK->LINK->LINK = NULL;
之后设置strcpy()
来修复它。