所以,我有这个结构。
typedef struct queue {
int size; //size of the array
int inicio; //first position that contains a value in the array
int tamanho; //number of actual values in the array
int *valores; //array
} QUEUE;
我有这个函数处理这个结构
int enqueue (QUEUE *q, int x){
if(q -> inicio + q -> tamanho < q -> size){
q -> valores[q -> inicio + q -> tamanho] = x;
q -> tamanho++;
}
else if (q -> tamanho < q -> size){
for(int i = 0; i < q -> tamanho; i++){
q -> valores[i] = q -> valores[q -> inicio + i];
}
q -> inicio = 0;
q -> valores[q -> tamanho++] = x;
}
else{
int *new = malloc(q -> size * 2 * sizeof(int));
for(int i = 0; i < q -> size; i++){
new[i] = q -> valores[i];
}
new[q -> size] = x;
q -> size *= 2;
free(q -> valores);
q -> valores = new;
}
return 0;
}
当你获取列表中的元素时,你从一开始就获取它们,所以一开始就"什么都没有"。
因此,如果这个函数有空间,它应该将值添加到末尾,将所有内容推送到开头,如果开头有空格,则在末尾添加它,如果它需要更多空间,则扩展数组。问题是...它会立即发出分段错误。如果我尝试在其他内容的开头打印某些内容,它不会这样做。
我真的迷茫了。
enqueue()
函数中为q -> valores
分配内存。分配它。
int enqueue (QUEUE *q, int x){
q -> valores = malloc(sizeof(QUEUE));/*check yourself how much memory you need */
/* remaining same code */
}