私は単純なキューをC言語で実装していますが、デキューした後にQ.frontにアクセスしようとすると、セグメンテーション違反が発生します(例えばint main()を参照してください)。 Cのこのキューインプリメンテーションでセグメンテーションフォルトが発生するのはなぜですか?
は、より正確には、問題が発生したときにI -- エンキュー単一の要素。
- デキューします。
- 1つまたは複数の要素をエンキューします。
- エンキュー複数の要素 - プログラムがセグメンテーションフォールトまたは任意のエラーIを与えるものではありませんしかし
- は
Q.front
にアクセスしてみてください。
- 一度だけデキューします。
- 多くの要素をエンキューします(オプション)
- アクセスQ.front正常に。
だからこれは私の完全なプログラムです -
#include <stdio.h>
#include <stdlib.h> //for malloc
struct qnode
{
int r;
struct qnode *link;
};
typedef struct qnode qNode;
typedef struct
{
qNode *front;
qNode *rear;
int qsize;
}QUEUE;
QUEUE initializeQueue(void)
{
QUEUE q;
q.front = NULL;
q.rear = NULL;
q.qsize = 0;
return q;
}
qNode *createQueueNode(int e)
{
qNode *temp;
temp = (qNode *) malloc(sizeof(qNode));
if(temp == NULL)
{
printf("INSUFFICIENT MEMORY\n");
exit(0);
}
temp->r = e;
temp->link = NULL;
return temp;
}
QUEUE enqueue(QUEUE q, int e)
{
if(q.rear == NULL)
{
q.rear = createQueueNode(e);
q.front = q.rear;
q.qsize++;
}
else
{
q.rear->link = createQueueNode(e);
q.rear = q.rear->link;
q.qsize++;
}
return q;
}
QUEUE dequeue(QUEUE q)
{
qNode *temp;
if(q.front == NULL)
{
printf("queue is empty\n");
exit(0);
}
else
{
temp = q.front;
q.front = q.front->link;
free(temp);
}
q.qsize--;
return q;
}
int main(){
QUEUE Q = initializeQueue();
Q = enqueue(Q, 2);
printf("%d\n",Q.front->r);
Q = dequeue(Q);
Q = enqueue(Q,4);
printf("%d\n",Q.front->r); // This line is giving segmentation fault
return 0;
}
デキュー操作後にもう1つの要素をエンキューした場合、どのようにnullになりますか? –
キューポイントはその新しいエンキューされた要素を指していませんか? –