C内存分配初始化和处理

时间:2012-08-17 13:30:28

标签: c memory-management pointer-arithmetic

我的任务有问题。我需要创建一个全局的可用内存块和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;

4 个答案:

答案 0 :(得分:5)

放弃*

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

您可能还想放弃演员,但这是您的电话。

答案 1 :(得分:1)

您需要将malloc的返回值赋给指针本身,而不是指针所指向的字节。 (无论如何,如果你取消引用最初的NULL指针,你的程序将会出现段错误。)

memory = malloc(size);

另外,不要贬低malloc的返回值。

答案 2 :(得分:1)

*memory = (byte*) malloc(size); - 此语句表示您尝试将堆内存块的地址指定为*memory的值。此处memoryNULL,因此会崩溃。

您必须将地址分配给变量,例如memory = (byte*) malloc(size);

答案 3 :(得分:0)

在头结构中,由于结构引用自身,因此将内部头指针声明为“struct _header * name;”。我认为其他人已经击中了所有其他观点:)