gpt4 book ai didi

c - 入队函数仅在第二次迭代时覆盖第一个条目

转载 作者:行者123 更新时间:2023-11-30 19:41:17 25 4
gpt4 key购买 nike

我确信我在这里遗漏了一个小细节,但我似乎无法指出它。如果您能指出正确的方向,我将非常感激。我有一个用 C 编写的非常简单的排队函数:

int enqueue(char **queue, char *new_item) {

if (queueLength >= MAX_ITEMS) {
perror("Item count exceeds allowed range\n");
return 1;
}

else {
if (queueStart == -1) { // empty queue
queueStart = 0;
queueEnd = 0;
}
else {
if (queueEnd == MAX_ITEMS - 1)
queueEnd = 0;
else queueEnd++;
}

// if queue[queueEnd] has not been initialized, allocate memory to initialize
if (queue[queueEnd] == NULL) {

if ((queue[queueEnd] = (char *)malloc(PATH_MAX * sizeof(char))) == NULL) {
perror("Could not allocate enough space for data");
return 1;
}
}

strcpy(queue[queueEnd], new_item);

queueLength++;
}

// print queue
int j = queueStart;
while (j <= queueEnd) {
printf("%s\n", queue[j]);
j++;
}
printf("-----\n");

return 0;
}

调用一次将一项添加到我的队列后,我的队列如下所示:

item1

第二次调用它后,我的队列如下所示:

item2
item2

第三次、第四次和第五次之后:

item2
item2
item3
item4
item5

所以问题被隔离到第二次迭代。欢迎任何有用的观察、想法或评论!

此外,这里是调用排队的代码片段。 inputFile 是一个打开的文件流。

char **queue;
char buff[PATH_MAX];
while (fgets(buff, PATH_MAX, inputFile) != NULL) {

if (enqueue(queue, buff)) {
printf("Failed to add client %s to queue", buff);
return 1;
}
}

最佳答案

感谢您的回复。找到答案:问题出在内存分配不当。条件

queue[queueEnd] == NULL

实际上从未被满足,这是我对内存分配的误解。为了解决这个问题,我删除了分配内存的代码块,而只是传入一个 char ** ,其所有指针元素都已初始化。

关于c - 入队函数仅在第二次迭代时覆盖第一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33717130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com