Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确使用sizeof测量块到malloc?_C_Pointers_Struct_Malloc_Sizeof - Fatal编程技术网

如何正确使用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。关键是这是错误的。