//该程序创建一个带有 2 个指针变量的结构节点、一个机场和一个到另一个节点的链接。它只是连接多伦多、迈阿密和波士顿机场,并通过 while 循环将其打印出来。该代码有效,但我得到 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;
}
这是我得到的图片
最佳答案
nodez
结构的 AIRPORT
成员应定义为 char AIRPORT[4];
,目前定义它是一个数组4 指向 char
的指针。编译器会产生不应被忽略的警告。
此外,您构造了一个链接节点列表,但忘记将最后一个节点的 LINK
设置为 NULL
。 malloc()
返回未初始化的内存,LINK
成员可能包含无效地址,当您迭代列表时会调用未定义的行为。
通过在最后一个 strcpy()
之后设置 J->LINK->LINK->LINK = NULL;
来修复它。
关于c - 包含节点的简单 C 编程代码可以运行,但会在代码块上产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39624776/