我有这段代码:
我的问题在于,每当我调用此函数ma_init();
时,footer->status = FREE
都会出现细分错误;我很感激,如果有人指出我正确的方向,因为谷歌搜索了几个小时后,我似乎无法解决这个问题。
编辑:标题文件:
答案 0 :(得分:1)
typedef unsigned char byte;
这是不可读的。考虑包括<stdint.h>
并使用uint8_t
。
我的问题是,每当我调用这个函数时ma_init();我在页脚上得到了一个分段错误 - &gt; status = FREE;
请学习编译所有警告&amp;调试信息(例如gcc -Wall -Wextra -g
与GCC ...)然后使用调试器(gdb
)...
您正在将header
初始化为mem_pool
的地址。
然后你做了一些可疑的(即错误)pointer arithmetic
mem_chunk_header * footer = header + header->size + sizeof(mem_chunk_header);
// the + above are likely to be wrong
您正在添加指针header
,因此+
是指向的元素大小(不是字节),以sizeof(mem_chunk_header)
为单位,当然至少为2可能更多(在我的Linux / x86-64桌面上它是8
)。你footer
很远。
使用调试器,您会注意到(通过查询header
,footer
,mem_pool
的值。还可以考虑使用valgrind
顺便说一句,如果您要对memory allocatoràmalloc
进行编码,则最好将其基于特定于操作系统的原语(通常system calls)修改virtual address space。在Linux上,您将使用mmap(2)和朋友。
在这里找到了正确的方向,因为谷歌搜索了几个小时后
你需要花费周阅读一些优秀的C编程书。在你的情况下,工作时间是不够的。