C内存分配初始化和处理

C内存分配初始化和处理,c,memory-management,pointer-arithmetic,C,Memory Management,Pointer Arithmetic,我在这里的任务有困难。我需要创建一个可用内存的全局块并对其进行malloc。由于类型转换和处理错误,在初始化时遇到一些问题 就像C语言中的数组一样,第一个数组实际上是指向第一个元素的指针,我的内存块需要与之类似,我可以使用指针算法来定位内存块 //global variable static byte *memory = NULL; void allocator_init(u_int32_t size){ *memory = (byte*) malloc(size); } 指向这

我在这里的任务有困难。我需要创建一个可用内存的全局块并对其进行malloc。由于类型转换和处理错误,在初始化时遇到一些问题

就像C语言中的数组一样,第一个数组实际上是指向第一个元素的指针,我的内存块需要与之类似,我可以使用指针算法来定位内存块

//global variable
static byte *memory = NULL;

void allocator_init(u_int32_t size){

     *memory = (byte*) malloc(size);
}
指向这些内存地址的地址/指针将通过结构/链接存储为内存块的头

typedef struct _header {
    int signiture;
    int size;
    header* next;
    header* prev;
} header;

放下
*

*memory = (byte*) malloc(size);
^

您可能还想删除强制转换,但这是您的决定。

您需要将malloc的返回值分配给指针本身,而不是指针指向的字节。(无论如何,如果您取消引用最初的空指针,您的程序将出错。)

另外,不要计算malloc的返回值。

*内存=(字节*)malloc(大小)-此语句表示您正试图将堆内存块的地址作为值分配给
*内存
。这里的
内存
具有
NULL
,因此它将崩溃


您必须将addres分配给变量,比如,
memory=(byte*)malloc(size)

在头结构中,由于结构引用自身,因此将内部头指针声明为“struct\u header*name;”。我想其他人已经触及了其他的点:

你可能也想放弃C++,但这是你的电话。如果是C,那么也不是:@H2CO3我曾经读过一位著名的SO用户的帖子,他说在C中铸造
malloc
的结果有利弊。@H2CO3绝对不是。我不记得是谁,否则我会给他/她起名。@H2CO3我也不施放,但我也不会直接建议其他人也这么做。如果你“需要”指针施放,可能你不是在编译C(而是C++),如果你包含了标题
,施放是多余的;如果你没有,演员阵容中隐藏着一只讨厌的虫子。。。或者你最好不使用强制转换,不管你是否包含了正确的标题:)我做了,它包含在topso中,全局静态将负责分配变量内存作为指针??否。你必须通过
malloc
将加法返回仅分配给变量
内存
,即使它也是局部变量。
memory = malloc(size);