gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:10:55 26 4
gpt4 key购买 nike

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

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];
}

最佳答案

您的“下面的第二行”是

shmem->... = ...

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

出于某种原因,您似乎已经锁定,您的问题在于分配Queue,而不是您将结果指针分配到的位置。顺便说一句,在 C 中,我们在赋值之前不会转换 malloc (或任何 void* 类型指针)的结果。

关于c - 我无法在 c 中编辑嵌套结构的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777267/

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