0

好了朋友们。我可以看到我正在做的这个项目的终点线。我试图弄清楚为什么当我尝试返回数组的值(即出队)时我的数组吐出 NULLS。我相信我的入队函数有效,并且也相信它从地址中获取值指针所指。这是我的代码。我故意不包括我的主要功能只是因为我不想让电路板超载。但是,如果需要查看它来诊断问题,请告诉我。

#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// the capacity of the queue
#define CAPACITY 10

// a queue
typedef struct
{
    // the index of the first element in the queue
    int head;

    // storage for the elements in the queue
    char* strings[CAPACITY];

    // the size of the queue
    int size;
}
queue;

// declare a queue (as a global variable)
queue q;

/*
* Puts a new element into the queue into the "end" of the data structure
* so that it will be retrived after the other elements already in the
* queue.
*/
bool enqueue(char* str)
{
    int rear = 0; // back of the queue

    if (q.size==CAPACITY)         
    {
        return false;
    }
    else
    {
        rear = (rear + 1) % CAPACITY;
        q.strings[rear] = str;
        printf("%s", q.strings[rear]);

        q.size++;
        return true;
    }
}

/**
 * Retrieves ("dequeues") the first element in the queue, following the
 * the "first-in, first-out" (FIFO) ordering of the data structure.
 * Reduces the size of the queue and adjusts the head to the next element.
 */
char* dequeue(void)
{
    char *charHead = NULL;   
    if (q.size)
    {
        charHead = malloc(sizeof(char)) ; 
        char *chpointer = malloc(sizeof(strArray[12]));
        q.head++;
        q.head = q.head%CAPACITY;
        charHead = q.strings[q.head];
        return charHead;        
     }       
     // Return null character if queue is empty
     return NULL;
}
4

2 回答 2

1
  1. enqueue肯定不行。它怎么能呢,当它声明时int rear = 0;,这意味着它总是在同一个位置排队。
  2. dequeue有两个malloc电话似乎没有做任何事情。您不会对它们的结果做任何事情,它们只不过是内存泄漏。
  3. 您应该考虑 和 的含义,head并将rear其记录下来。否则,没有办法说是否dequeue正确。它首先递增head,然后取q.strings[q.head]. 如果head是入队的最后一个字符串的位置,这是错误的 - 您应该在递增之前获取该字符串。
  4. 你从不减量size。这不可能。
于 2013-02-20T08:22:11.357 回答
1

我相信我的排队功能有效,

我无法分享你的信心,因为 enqueue() 似乎总是将其存储在 q.strings[1] 中。

于 2013-02-20T08:22:20.027 回答