我試圖在C中創建隊列(作爲類項目)。他們提供的演示代碼是用於Borland Turbo C.我試圖通過gcc
來重建程序。儘管代碼在Turbo C中運行得很完美,但它在運行時將gcc
中的錯誤報告爲Segmentation Fault (core dumped)
。初始化迭代器指針:分割錯誤
我沒有包括不必要的代碼部分。逐行嘗試並測試它。
struct node {
int data;
struct node *link;
};
struct queue {
struct node *front;
struct node *rear;
};
void initQ(struct queue *q) {
q->front = q->rear = NULL; // Error : Segmentation Fault! (core dumped)
}
void main() {
struct queue *Q;
initQ(Q);
}
我相信問題與編譯器中C版本有關。由於Turbo C相當古老,它不支持最新的修補程序。
void displayQ(struct queue *q) {
struct node *temp;
temp->link = q->front; // Error : Segmentation Fault! (core dumped)
}
問題1:我在像代碼其他各個部分得到類似Segmentation Fault
錯誤爲什麼海灣合作委員會給出這樣的運行時錯誤? (在此代碼中)
問題2:爲什麼代碼在Turbo C中工作正常,但不是gcc?
問題3:有沒有這種編程風格的替代方案?
廣告問題2:每個版本的C代碼都是無效的,檢查爲什麼它看起來與Turbo C一起工作將取決於其他一些信息。例如。平臺。另外請注意,它可能似乎適用於小型隊列,但對於較大的輸入而言會失敗,或者如果再次運行則可能會立即失敗等等。看來,'Q'碰巧存在一些可以解引用的隨機值(它所指向的內容以及您可能覆蓋的其他數據是不同的東西)。另外請注意,它也可能在使用Gcc進行編譯時似乎也可以工作。 – mafso 2014-08-28 16:37:17