尝试使用malloc时出现分段错误

时间:2018-04-14 11:07:32

标签: c arrays dynamic struct malloc

所以,我有这个结构。

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

当您获取列表中的元素时,您可以从开始使用它们,因此这些内容&#34;没有&#34;在开始。

因此,如果该函数有空格,则该函数应该将值添加到结尾,将所有内容推送到beggining并在最后添加它,如果它在beggining中没有空格而最后没有,并展开数组如果需要更多空间。事情是......它立即发出了一个分段错误。如果我尝试在其他地方开始时打印一些东西,它就不会这样做。

我真的迷路了。

1 个答案:

答案 0 :(得分: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 */
}