リンクされたリストを使用して、C でキュー (文字列バージョン) プログラムを作成しようとしています。
構造は次のとおりです。
struct strqueue;
typedef struct strqueue *StrQueue;
struct node {
char *item;
struct node *next;
};
struct strqueue {
struct node *front;//first element
struct node *back;//last element in the list
int length;
};
最初に新しい StrQueue を作成します
StrQueue create_StrQueue(void) {
StrQueue q = malloc(sizeof (struct strqueue));
q->front = NULL;
q->back = NULL;
q->length = 0;
return q;
}
str のコピーを作成し、キューの最後に配置します
void push(StrQueue sq, const char *str) {
struct node *new = malloc(sizeof(struct node));
new->item = NULL;
strcpy(new->item,str);//invalid write size of 1 ?
new->next = NULL;
if (sq->length == 0) {
sq->front = new;
sq->back = new;
} else {
sq->back->next = new;
sq->back = new;
}
sq->length++;
}
sq の先頭にあるノードを解放し、キューの最初にあった文字列を返します
char *pop(StrQueue sq) {
if (sq->length == 0) {
return NULL;
}
struct node *i = sq->front;
char *new = sq->front->item;
sq->front = i->next;
sq->length --;
free(sq->front);
return new;
}
strcpy(new->item,str); で無効な書き込みサイズ 1 を取得しました。なぜこのエラーが発生したのかわかりません。誰でも理由を教えてもらえますか?どうすれば修正できますか? 前もって感謝します。