C语言 我怎么能在没有无效写入的情况下隔离错误



我正在尝试实现我自己的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 循环中的未初始化数据段。

相关内容

最新更新