我的任务有问题。我需要创建一个全局的可用内存块和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;
答案 0 :(得分:5)
放弃*
:
*memory = (byte*) malloc(size);
^
您可能还想放弃演员,但这是您的电话。
答案 1 :(得分:1)
您需要将malloc的返回值赋给指针本身,而不是指针所指向的字节。 (无论如何,如果你取消引用最初的NULL指针,你的程序将会出现段错误。)
memory = malloc(size);
另外,不要贬低malloc的返回值。
答案 2 :(得分:1)
*memory = (byte*) malloc(size);
- 此语句表示您尝试将堆内存块的地址指定为*memory
的值。此处memory
有NULL
,因此会崩溃。
您必须将地址分配给变量,例如memory = (byte*) malloc(size);
答案 3 :(得分:0)
在头结构中,由于结构引用自身,因此将内部头指针声明为“struct _header * name;”。我认为其他人已经击中了所有其他观点:)