我正在尝试实现我自己的malloc,并试图了解内存的工作原理。
我写了这个,但我不明白为什么我在这里有一个分段错误:
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
char *mem;
void *maxSize;
i = 0;
maxSize = sbrk(0);
printf("%pn", maxSize);
mem = maxSize - 500;
printf("%pn", mem);
while (i != 100)
{
mem[i] = 1;
i++;
printf("%pn", &mem[i]);
}
}
当我使用 valgrind 测试此代码时,一切正常,没有任何错误。但是当我运行这段代码时,我在第一个循环中出现段错误。
知道为什么吗?你知道我怎样才能在我的过程中获得第一个免费地址吗?
您的"单位化数据细分受众群"的规模是多少?我想它很小,所以你会在数据段开始之前编写。您可以尝试先增加它作为检查:
...
sbrk(1000);
^^^^^^^^^^^
i = 0;
maxSize = sbrk(0);
...
sbrk
返回一个指针,指向未初始化数据段之后的内存块开头。由于将指针减少到剩余 500 字节,因此很可能会损坏 while 循环中的未初始化数据段。