我對C相對比較陌生,我不明白這是什麼意思。當我嘗試運行下面的代碼時,出現Segmentation fault (core dumped)
錯誤。用於製作節點「地圖」的目的。節點可能有三個指向另一個節點的指針,其中一些有三個指針不指向另一個節點。如果他們不這樣做,我將結構中的指針指向NULL。我做了一個返回node_ptr
的函數。什麼是分段錯誤(core dumped)是什麼意思?
#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;
}
究竟是什麼導致了這種分段錯誤,這是什麼意思?另外,能否提供解決方案來解決此代碼段?
你是不是分配內存在makenode到node_ptr。 – Balu
當您嘗試解除引用未初始化的指針時,會導致分段錯誤(簡稱爲seg fault)。所以如果你有一個指針'node_ptr temp;'並且你嘗試'temp-> ch = any;',你會得到seg故障。請參閱[這裏](https://en.wikipedia.org/wiki/Segmentation_fault#Causes)對於其他引起這種情況的方法 – smac89
「如果您有一個指針node_ptr temp;並且您嘗試執行temp-> ch = any;你會得到seg故障「 - 不一定。它是未初始化的,所以它可能指向任何位置 - 可能是有效的,也可能不是,但肯定不是「自由」的 - 覆蓋它會導致問題。 – keltar