如何正确使用 sizeof 来测量 malloc 的块?
How do I properly use sizeof to measure the block to malloc?
假设我有一个简单的结构,包括一些指针:
typedef struct Type {
uint32_t* intArrayPointer;
} Type;
malloc struct 指针的正确方法是什么?由于这两种方法都有效,我假设两者之一确实分配了比需要更多的内存:
-
Type* newType() {
Type* returnPointer = malloc(sizeof(Type));
returnPointer->intArrayPointer = malloc(sizeof(uint32_t)*128);
return returnPointer;
}
-
Type* newType() {
Type* returnPointer = malloc(sizeof(Type*));
returnPointer->intArrayPointer = malloc(sizeof(uint32_t)*128);
return returnPointer;
}
供参考,如何在代码中使用它:
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
做。并且不要忘记检查调用是否成功。
假设我有一个简单的结构,包括一些指针:
typedef struct Type {
uint32_t* intArrayPointer;
} Type;
malloc struct 指针的正确方法是什么?由于这两种方法都有效,我假设两者之一确实分配了比需要更多的内存:
-
Type* newType() { Type* returnPointer = malloc(sizeof(Type)); returnPointer->intArrayPointer = malloc(sizeof(uint32_t)*128); return returnPointer; }
-
Type* newType() { Type* returnPointer = malloc(sizeof(Type*)); returnPointer->intArrayPointer = malloc(sizeof(uint32_t)*128); return returnPointer; }
供参考,如何在代码中使用它:
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
做。并且不要忘记检查调用是否成功。