我无法在C中编辑嵌套结构的实例

当尝试编辑嵌套结构的实例时,我的代码不起作用。代码成功编译,没有错误。它会执行每一行,但是会停止执行,直到到达下面的第二行时才结束执行:

int numberOfProcess = 5;
shmem->pid_queue = createQueue(numberOfProcess);
enqueue(shmem->pid_queue,getpid()); 

这些是下面的struct实例:

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];
}
bilong1988 回答:我无法在C中编辑嵌套结构的实例

您的“第二行下方”

shmem->... = ...

首先您是否正确初始化了shmem?就我们所知,它可能是空指针或无效指针。

出于某种原因,您似乎已经陷入困境,问题出在分配Queue上,而不是分配结果指针指向何处。顺便说一句,在C中,在分配之前,我们不会强制转换malloc(或任何与此类型的void*类型的指针)的结果。

本文链接:https://www.f2er.com/3133692.html

大家都在问