【问题标题】:Invalid operands to binary != (have struct and void *)二进制操作数无效!=(具有结构和 void *)
【发布时间】:2020-12-19 13:31:44
【问题描述】:

这段代码抛出错误:

二进制的无效操作数 !=(有 'dataframe' {aka 'struct dataframe'} 和 'void *'

      if (new->bucket[i] != NULL) {

但我不明白为什么会发生此错误,因为我正在尝试评估我的数组的某个单元格是否为 NULL。

我的结构和包含错误抛出代码的函数:

enum dfStatus {
   EMPTY = 2, FULL, REMOVED
};

typedef struct dataframe {
   void *key;
   void *data;
   enum dfStatus status;
} dataframe;

typedef struct assoc {
   dataframe *bucket;
   unsigned int buckCnt;
   unsigned int totalCnt;
   unsigned int multip;
   unsigned int keysize;
} assoc;

assoc* _assoc_resize(assoc* a)
{
   assoc *ass = a, *new;
   int size = ass->buckCnt, i, multi = ass->multip * 2;
   dataframe *df = ncalloc(size * 2, sizeof(dataframe));

   for (i = 0; i < size * SCALEFACTOR; i++) {
      df[i].status = EMPTY;
   }

   new = ncalloc(1, sizeof(assoc));
   new->multip = 1;
   new->bucket = df;
   new->buckCnt = size * 2;
   new->totalCnt = 0;

   for (i = 0; i < size; i++) {
      if (new->bucket[i] != NULL) {
         new->bucket[i / multi] = ass->bucket[i];
      }
   }
   new->totalCnt = ass->totalCnt;
   new->multip = multi;
   free(ass->bucket);
   free(ass);

   a = new;

   return a;
}

【问题讨论】:

  • new-&gt;bucket[i]dataframe 不是指向 dataframe指针。您不能比较不是指向 NULL 指针的指针。这正是错误消息告诉您的内容
  • 添加什么来解决它然后@Jabberwocky
  • @gumuruh 改变了整体方法。不是指针的东西不能为 NULL。

标签: c struct


【解决方案1】:

NULL 只能用于指针。即使new-&gt;bucket 是指针,当您使用new-&gt;bucket[i] 时,它也会返回dataframe 而不是指针。您可以尝试使用双指针,而不是将 new->bucket 保存为dataframe*,将其保存为dataframe**,这样它就不会是dataframe 的“数组”,而是dataframe* 的“数组”。

【讨论】:

  • 注意:NULL 显然定义为#define NULL ((void *)0)。这就是使它成为指针的原因。
猜你喜欢
  • 2014-11-29
  • 2021-03-11
  • 2014-11-23
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2012-09-24
相关资源
最近更新 更多