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