Мой код не работает при попытке редактировать экземпляр вложенной структуры. Код успешно компилируется, ошибки нет. Он выполняет каждую строку, но прекращает выполнение и не завершает выполнение, когда достигает второй строки ниже:
int numberOfProcess = 5;
shmem->pid_queue = createQueue(numberOfProcess);
enqueue(shmem->pid_queue, getpid());
Ниже приведены следующие примеры структур:
SharedData *shmem;
Queue *queue;
Xcode дает следующеепредупреждение:
Thread 1: EXC_BAD_ACCESS
Моя структура ниже
typedef struct {
int front, rear, size;
unsigned capacity;
int* array;
} Queue;
typedef struct {
int shmInt;
int timeSec;
int timeNanosec;
Queue *shmMsgSec_queue;
Queue *shmMsgNanosec_queue;
int items_in_queue;
sem_t mutex;
Queue *pid_queue;
} SharedData;
Существуют функции, которые управляют очередью, показанной ниже:
Queue* createQueue(unsigned capacity)
{
Queue* queue = ( Queue*) malloc(sizeof( Queue));
queue->capacity = capacity;
queue->front = queue->size = 0;
queue->rear = capacity - 1; // This is important, see the enqueue
queue->array = (int*) malloc(queue->capacity * sizeof(int));
return queue;
}
int isFull( Queue* queue)
{ return (queue->size == queue->capacity); }
int isEmpty( Queue* queue)
{ return (queue->size == 0); }
void enqueue( Queue* queue, int item)
{
if (isFull(queue))
return;
queue->rear = (queue->rear + 1)%queue->capacity;
queue->array[queue->rear] = item;
queue->size = queue->size + 1;
printf("%d enqueued to queue\n", item);
}
int dequeue( Queue* queue)
{
if (isEmpty(queue))
return INT_MIN;
int item = queue->array[queue->front];
queue->front = (queue->front + 1)%queue->capacity;
queue->size = queue->size - 1;
return item;
}
int front( Queue* queue)
{
if (isEmpty(queue))
return INT_MIN;
return queue->array[queue->front];
}
int rear( Queue* queue)
{
if (isEmpty(queue))
return INT_MIN;
return queue->array[queue->rear];
}