【发布时间】:2020-09-17 08:34:15
【问题描述】:
我正在尝试使用 C 中的链表创建队列。我使用两个结构来表示队列和每个节点,如下所示。
#define DATA_MAX 100
struct QueueNode_ch
{
struct QueueNode_ch* next;
char data[(DATA_MAX + 1)];
};
typedef struct QueueNode_ch QueueNode_ch;
struct Queue_ch
{
struct QueueNode_ch* front;
struct QueueNode_ch* rear;
int count;
};
typedef struct Queue_ch Queue_ch;
然后我使用以下这些函数来初始化队列和节点。
int initQueue_ch(Queue_ch* q)
{
q = (Queue_ch*)malloc(sizeof(Queue_ch));
q->count = 0;
q->front = NULL;
q->rear = NULL;
return 0;
}
int initQueueNode_ch(QueueNode_ch* node)
{
node = (QueueNode_ch*)malloc(sizeof(QueueNode_ch));
node->next = NULL;
node->data[0] = '\0';
return 0;
}
在运行我的 enqueue 函数时,由于 strcpy 函数而出现段错误,并且在调试 gdb 时说它无法访问我尝试添加的节点的内存。入队代码如下:
int enqueue_ch(Queue_ch* q, char* data)
{
if(strlen(data) > (DATA_MAX + 1))
return 1;
QueueNode_ch* tmp;
initQueueNode_ch(tmp);
strncpy(tmp->data, data, DATA_MAX);
if(isEmpty_queue_ch(q))
q->rear = q->front = tmp;
else
{
q->rear->next = tmp;
q->rear = tmp;
}
q->count++;
return 0;
}
我还将包括我的主要功能作为附加信息。
#include <stdio.h>
#include "Queue.h"
int main()
{
Queue_ch* queue;
initQueue_ch(queue);
enqueue_ch(queue, "hello");
return 0;
}
据我所知,应该有足够的空间将给定的字符串复制到节点。有人知道什么是失败和可能的修复吗?
【问题讨论】:
-
(Queue_ch* q) { q =参数按值传递。原来的queue没有初始化。 -
关于:
if(strlen(data) > (DATA_MAX + 1))函数strlen()将OFFSET返回到尾随的NUL字节,建议:if( strlen( data) > DATA_MAX )
标签: c struct queue singly-linked-list function-definition