Я должен выделить для массива также, но я не знаю, как
из-за строки
myQueue->capacity=maxElements;
лог c должен иметь
myQueue->array = malloc(sizeof(int) * maxElements);
Должен ли я просто набрать myQueue-> array = (myQueue) mallo c (sizeof (myQueue)); это будет работать?
только в случае, если sizeof (myQueue) больше sizeof (int) * maxElements , но вы только проверяете maxElements не слишком маленьким когда maxElements достаточно велико, поведение не определено (обычно, когда maxElements больше 6, когда размер указателя равен двойному размеру int ).
Из этого:
Плохая идея иметь typedef , определяющий указатель, лучше иметь указатели, явные в коде, чтобы увидеть их
первый возврат; должен быть return NULL;
зная myQueue is NULL, не разыменовывайте его после, вы можете напрямую вернуть NULL после того, как printf
при проверке первого mallo c не возвращается NULL, также для второго, обычно в том же , если
Например:
struct QueueRecord
{
int capacity;
int front;
int rear;
int size;
int *array;
};
typedef struct QueueRecord Queue;
void MakeEmptyQueue(Queue *);
Queue * CreateQueue(int maxElements)
{
Queue * myQueue;
if (maxElements < MIN_QUEUE_SIZE)
{
printf("Queue/maxElements is too small\n");
return NULL;
}
if (((myQueue = malloc(sizeof(Queue))) == NULL) ||
((myQueue->array = malloc(sizeof(int) * maxElements)) == NULL))
{
printf("out of memory space\n");
free(myQueue); /* to avoid memory leak, no problem if myQueue is NULL */
return NULL;
}
myQueue->capacity = maxElements;
MakeEmptyQueue(myQueue);
return myQueue;
}