我对C比较陌生,我不明白这意味着什么。当我尝试运行下面的代码时,我收到Segmentation fault (core dumped)
错误。目的是制作一张地图"节点节点可能有三个指向另一个节点的指针,一些节点可能有三个指针。如果它们没有,我将struct指针中的指针指向NULL。我创建了一个返回node_ptr
的函数。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *node_ptr;
struct Node {
char ch;
node_ptr firstPtr;
node_ptr secondPtr;
node_ptr thirdPtr;
};
node_ptr makeNode(char any, node_ptr x, node_ptr y, node_ptr z){
node_ptr temp;
temp->ch = any;
temp->firstPtr = x;
temp->secondPtr = y;
temp->thirdPtr = z;
return temp;
}
int main(){
printf("Making a map.....");
node_ptr A, B, C, D, E, F, G, H;
A = makeNode('A', B, NULL, NULL);
B = makeNode('B', A, C, F);
C = makeNode('C', B, D, NULL);
D = makeNode('D', C, E, NULL);
E = makeNode('E', D, NULL, NULL);
F = makeNode('F', B, G, H);
G = makeNode('G', F, NULL, NULL);
H = makeNode('H', F, NULL, NULL);
return 0;
}
究竟是什么原因造成了这种细分错误,是什么意思?此外,是否可以提供解决方案来修复此代码段?
答案 0 :(得分:4)
这意味着您正在访问您无法访问的内存。在这里,您正在指向makeNode()开头的节点,但您并未将其指向任何位置。它可能指向任何地方。然后你尝试用值来填充它所指向的东西,但是它恰好指向的地方是你无法访问的地方(它可能是一个用于其他东西的内存区域)。 / p>
您要做的是为节点分配内存,将节点指针指向该内存,然后用值填充并返回它。类似的东西:
node_ptr makeNode(char any, node_ptr x, node_ptr y, node_ptr z){
node_ptr temp = (node_ptr) malloc(sizeof(struct Node));
temp->ch = any;
temp->firstPtr = x;
temp->secondPtr = y;
temp->thirdPtr = z;
return temp;
}
然后确保在不再需要时释放此内存,并调用free()
:
free(A);
free(B);
free(C);
... etc. ...