节点总是插入到GLib树的第一个节点中

时间:2019-03-29 18:02:10

标签: c tree

我有这些结构

struct faturacao{
  GTree* meses[12];
};


struct info{
  float valores[6];
  int vendas[3];
  int quantidade[3];
};

正在初始化:

Faturacao initFaturacao(){
  Faturacao fat = malloc(sizeof(struct faturacao));

  for(int i = 0; i < 12; i++){
    fat -> meses[i] = g_tree_new(cmpStrings);
  }

  return fat;
}

插入:

void insereFaturacao(Faturacao f, Venda v){
  gpointer ptr = g_tree_lookup(f -> meses[(v -> mes) - 1], (v -> produto));

  Info temp;
  if(ptr == NULL){
    temp = calloc(1, sizeof(struct info));
  }
  else{
    temp = (Info)ptr;
  }

  atualizaInfo(temp, v);

  g_tree_insert(f -> meses[(v -> mes)-1], (v -> produto), temp);

  printf("%d\n", g_tree_nnodes(f -> meses[0]));

}

AtualizaINfo:

void atualizaInfo(Info i, Venda v){
  int index = (v -> promocao == 'N') ? 2 + v -> filial : v -> filial - 1;
  i -> valores[index] += v -> preco * v -> quantidade;
  i -> vendas[(v -> filial)- 1]++;
  i -> quantidade[(v -> filial) - 1] += v -> quantidade;
}

Venda和Info都是指针,因此是结构体,produto是结构体中的char *。

这是cmpStrings

int cmpStrings (const void *a, const void *b){
  char* c1 = (char*) a;
  char* c2 = (char*) b;
  return strcmp(c1, c2);
}

我不能完全确定发生了什么,但是显然它总是替换第一个节点,而不是添加另一个节点。我有点迷路了

0 个答案:

没有答案