【发布时间】: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->bucket[i]是dataframe不是指向dataframe的 指针。您不能比较不是指向 NULL 指针的指针。这正是错误消息告诉您的内容 -
添加什么来解决它然后@Jabberwocky
-
@gumuruh 改变了整体方法。不是指针的东西不能为 NULL。