时间:2010-12-02 00:39:20

标签: c++ memory-management

解释这个错误的一切可能有点难,但我会尽我所能。不幸的是,代码太大了,试图包含它是不切实际的。

我正在为家庭作业写一个学术操作系统(如果你必须知道的话,那就是玉米片),我最近需要做的是在核心地图中实现互斥。为此,我在模拟主内存中为每页添加了一个Lock和一个条件变量。执行此操作后,我运行我的代码并通过一次调用异常(在与核心映射完全不同的目录中)处理程序就好了,但是第二次调用该函数时我得到了以下调用的错误:{{1}它的内容如下:

r=new Lock("read");

只是为了看看它是如何表现的,我把那个锁的分配改成了我的系统文件中的extern(那里有很多全局的externs),之后我在调用*** glibc detected *** /home/some_other_directories/workspace/nachos3_repo/vm/nachos: malloc(): memory corruption (fast): 0x0805fe20 *** 时遇到了一个seg错误我通过堆栈追溯到调用malloc来调用malloc。

我最好的猜测是我的堆越来越大,但我不确定是不是这样,或者如果它是如何处理它。任何人都可以解释这个问题吗?

1 个答案:

答案 0 :(得分:1)

malloc只是这里的受害者。在代码的一些完全不同的部分,您已经在分配的边界之外编写,因此具有损坏的链链接,堆链管理器使用它们来跟踪空闲/分配的块。当您尝试在此处分配时,堆管理器正在追踪这些链接列表并进入受保护区域(很可能未分配)。您应首先检查您的更改,看看您是否可以找到您在哪里涂写内存。

相关问题