C |指针|分段故障

时间:2017-07-17 18:25:15

标签: c pointers struct segmentation-fault

我有这段代码:

我的问题在于,每当我调用此函数ma_init();时,footer->status = FREE都会出现细分错误;我很感激,如果有人指出我正确的方向,因为谷歌搜索了几个小时后,我似乎无法解决这个问题。

编辑:标题文件:

1 个答案:

答案 0 :(得分:1)

  

typedef unsigned char byte;

这是不可读的。考虑包括<stdint.h>并使用uint8_t

  

我的问题是,每当我调用这个函数时ma_init();我在页脚上得到了一个分段错误 - &gt; status = FREE;

请学习编译所有警告&amp;调试信息(例如gcc -Wall -Wextra -gGCC ...)然后使用调试器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很远。

使用调试器,您会注意到(通过查询headerfootermem_pool的值。还可以考虑使用valgrind

顺便说一句,如果您要对memory allocatoràmalloc进行编码,则最好将其基于特定于操作系统的原语(通常system calls)修改virtual address space。在Linux上,您将使用mmap(2)和朋友。

  

在这里找到了正确的方向,因为谷歌搜索了几个小时后

你需要花费阅读一些优秀的C编程书。在你的情况下,工作时间是不够的。