C内存分配初始化和处理
我在这里的任务有困难。我需要创建一个可用内存的全局块并对其进行malloc。由于类型转换和处理错误,在初始化时遇到一些问题 就像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); } 指向这
//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);