【发布时间】:2014-03-27 12:25:05
【问题描述】:
我对 C 比较陌生,我不明白这意味着什么。当我尝试运行下面的代码时,我得到了Segmentation fault (core dumped) 错误。目的只是制作节点的“地图”。节点可能具有三个指向另一个节点的指针,有些具有全部三个,有些则没有。如果他们不这样做,我将结构中的指针指向 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;
}
究竟是什么导致了这个分段错误,它是什么意思?另外,能否提供解决方案来修复此代码 sn-p here?
【问题讨论】:
-
你没有在 makenode 中为 node_ptr 分配内存。
-
segmentation fault(简称seg fault)是当你尝试去引用一个未初始化的指针时引起的。因此,如果您有一个指针
node_ptr temp;并且您尝试执行temp->ch = any;,则会出现段错误。请参阅here 了解导致此问题的其他方式 -
"如果你有一个指针 node_ptr temp;并且你尝试做 temp->ch = any;,你会得到 seg fault" - 不一定。它是未初始化的,所以它可能指向任何位置——可能是有效的,也可能不是,但肯定不是“免费”的——覆盖它会导致问题。
标签: c pointers segmentation-fault