我创建了一个包含二维数组的Queue
,该数组的每个元素的大小为2.当我在队列中排队2个数组时,会发生异常。
以下是我的代码:
#include "stdio.h"
#define size 1000
typedef struct Queue {
int *data[2];
int front;
int rear;
}Queue;
void init(Queue *q)
{
q->front=0;
q->rear=0;
}
void Enqueue(Queue *q,int *value)
{
if(q->rear==size)
return ;
q->data[q->rear++]=value;
}
void main()
{
Queue q[1];
init(q);
int a[10][2];
for(int i=0;i<10;i++) {
a[i][0]=i;
a[i][1]=i*2+1;
Enqueue(q,a[i]);
}
}
答案 0 :(得分:0)
我至少可以看到几个问题:
typedef struct Queue {
int *data[2];
这不是指向二维二维数组的指针,我认为这是预期的。它是一个包含两个int指针的数组。 对于包含两个元素的1000个数组条目的2D数组,您可能需要:
typedef struct Queue {
int data[size][2];
然后,当您调用Enqueue()时,将两个整数的数组复制到后面指示的相应条目中:
void Enqueue(Queue *q,int value[2])
{
if(q->rear==size)
return ;
memcpy(q->data[q->rear], value, sizeof(q->data[q->rear]));
q->rear++;
}
此解决方案将生成固定数组。如果你想要动态构建数组,那么因为你需要malloc / calloc内存然后在完成后释放它就会更复杂一些。
答案 1 :(得分:0)
*I create a Queue that includes a two dimensional array*
不,你只需在int *data[2];
如果要创建包含两个版本阵列的Quene,it will be int data[size][size_anoter]
但是,你不需要我二维。在void Enqueue(Queue *q,int *value)
函数中,将地址从[i]传递给data [i]。所以你只需要一个足够大的指针数组; \
int * data[size];
此外,最好将size
定义为SIZE
。
答案 2 :(得分:0)
可能,感觉如下
#include <stdio.h>
#include <stdlib.h>
#define size 1000
typedef struct Queue {
int (**data)[2];
int front;
int rear;
} Queue;
void init(Queue *q){
q->front=0;
q->rear=0;
q->data = malloc(size*sizeof(int (*)[2]));
}
void Enqueue(Queue *q,int (*value)[2]){
if(q->rear==size)
return ;
q->data[q->rear++]=value;
}
int main(){
Queue q[1];
init(q);
int a[10][2];
for(int i=0;i<10;i++) {
a[i][0]=i;
a[i][1]=i*2+1;
Enqueue(q, &a[i]);
}
//printf("%d\n", (*q->data[0])[1]);
return 0;
}