好的我有一些类型的定义:
typedef struct {
int validBit
int pageNumber
} PT_ENTRY;
typedef struct {
PT_ENTRY entry[128];
} PT;
稍后在代码中,我尝试:
PT pt = {};
int i;
for(i=0;i<128;i++){
pt.entry[i] = malloc(sizeof(PT_ENTRY));
}
这给了我错误:
Incompatible types in assignment.
所以我很困惑,因为我认为我昨天完成了同样的事情并且它有效,然后我改变了我的代码但决定改回来。
pt.entry不是一个指针数组?我在这里缺少什么?
或者更好的是,创建包含128个结构数组PT_ENTRY的结构PT的最佳和最快方法是什么?
答案 0 :(得分:6)
这是因为entry
数组中的条目不是指针。它是一组实际结构,而不是结构指针。
如果你想要一个指针数组,你需要将数组声明为
PT_ENTRY *entry[128];
但是你需要考虑一下你是否真的需要指针数组?很可能你不需要它,应该让它像它一样。因此,没有内存可以分配,没有内存可以释放,不用担心内存泄漏或无效指针。如果在某些时候,您需要传递一个PT_ENTRY
作为指针,那么您可以使用地址运算符&
:
some_function(&pt.entry[some_index]);