c - 我无法在 c 中编辑嵌套结构的实例
问题描述
尝试编辑嵌套结构的实例时,我的代码不起作用。代码编译成功,没有错误。它执行每一行,但是当它到达下面的第二行时它停止执行并且没有完成执行:
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*
类型的指针)的结果。
推荐阅读
- amazon-web-services - 使用 AWS 证书管理器请求证书时出错
- android - 如何使亚马逊应用内购买 (IAP) 2.0 与 Android R8 一起使用
- machine-learning - 是否可以使用 Vision coreML 执行批量预测
- java - Spring网关服务登录页面并通过zuul授权到oauth2授权服务器
- .net-core - ASP.NET Core:[基于策略的授权] 未指定 authenticationScheme,也未找到 DefaultChallengeScheme
- c - 我有一个 C 语言的竞赛程序,无论如何总是有相同的获胜者
- excel - 停止宏代码执行,直到 SQL 查询完成
- django - Django中的有序列表
- haskell - 从两个列表进行排列但不使用完整的数字
- sql-server - How to count number of emails and average of emails sent by hour?