0

我在这里的任务遇到了麻烦。我需要创建一个全局空闲内存块并对其进行 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

4 回答 4

5

删除*

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

您可能还想放弃演员阵容,但这是您的决定。

于 2012-08-17T13:32:06.887 回答
1

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

memory = malloc(size);

另外,不要caat malloc 的返回值。

于 2012-08-17T13:33:27.370 回答
1

*memory = (byte*) malloc(size);- 此语句意味着您正在尝试将堆内存块的地址作为值分配给*memory. 这memory是有NULL,所以它会崩溃。

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

于 2012-08-17T13:35:16.307 回答
0

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

于 2012-08-17T16:27:48.180 回答