如何正确使用sizeof测量块到malloc?
假设我有一个简单的结构,包括一些指针:如何正确使用sizeof测量块到malloc?,c,pointers,struct,malloc,sizeof,C,Pointers,Struct,Malloc,Sizeof,假设我有一个简单的结构,包括一些指针: typedef struct Type { uint32_t* intArrayPointer; } Type; malloc结构指针的正确方法是什么?由于这两种方法都有效,我假设这两种方法中的一种确实分配了超出需要的内存: 作为参考,这将如何在代码中使用: void freeType(Type* this) { free(this->intArrayPointer); free(this); } int main() {
typedef struct Type {
uint32_t* intArrayPointer;
} Type;
malloc结构指针的正确方法是什么?由于这两种方法都有效,我假设这两种方法中的一种确实分配了超出需要的内存:
作为参考,这将如何在代码中使用:
void freeType(Type* this) {
free(this->intArrayPointer);
free(this);
}
int main() {
Type* pt = newType();
//do Stuff
freeType(pt);
}
最好的方法是使用
Type* returnPointer = malloc(sizeof(*returnPointer));
或者更好
Type* returnPointer = malloc(sizeof *returnPointer);
// parenthesis is needed only when argument is a type,
// not needed for expressions used as argument
这完全不取决于类型
同样,你也应该为intArrayPointer做些什么。不要忘了检查通话是否成功。最好的方法是使用
Type* returnPointer = malloc(sizeof(*returnPointer));
或者更好
Type* returnPointer = malloc(sizeof *returnPointer);
// parenthesis is needed only when argument is a type,
// not needed for expressions used as argument
这完全不取决于类型
同样,你也应该为intArrayPointer做些什么。还有,别忘了检查调用是否成功。使用intArrayPointer,我真的很想保留512个连续字节,指针指向第一个。@WhozCraig非常有效,让我补充一下。@FrankPirata没关系,我只讨论语法。Minor:sizeof*返回指针,带空格,看起来不像sizeof*returnPointer那样像乘法。使用intArrayPointer,我真的想保留512个连续字节,指针指向第一个。@WhozCraig非常有效,让我添加它。@FrankPirata没关系,我只讨论语法。Minor:sizeof*returnPointer带空格,看起来不像sizeof*returnPointer那样像乘法。sizeofType*可以更大、更小或等于sizeofType。关键的一点是它是错误的。sizeofType*可以更大、更小或等于sizeofType。关键是这是错误的。