堆输出损坏

时间:2012-08-18 22:39:21

标签: c++

我正在尝试从类中打印一些数据并且打印正常,直到达到整数然后抛出堆损坏错误。任何人都可以向我解释为什么会这样做?

void Skill::Display(ostream& out){
    char* myName = getName();
    char* myDescription = getDescription();
    int myLevel = getLevel();

    out << " - " << myName << " -- " << myDescription << "[Lvl: ";

    out << myLevel << "]" << endl; //Everything up to here is fine
}//breakpoint here and it gives me heap error.

我不明白为什么打印int会导致堆错误。

3 个答案:

答案 0 :(得分:2)

我认为错误更可能是由myName或myDescription中的缓冲区溢出引起的。他们是如何计算的?你还记得null终止并考虑缓冲区大小吗?

请记住,检测到错误的点不一定是发生错误的点。

答案 1 :(得分:0)

您的getName()或getDescription()方法中发生错误。检查初始化问题和空指针。请参阅@Atimony的建议。不正确终止的字符串也可能导致问题。

答案 2 :(得分:0)

堆损坏问题是,检测到损坏的地方经常与实际发生损坏的地方无关。很久以前腐败可能在不同的组件中以不同的方式发生。

听起来你有一个复制品。在这种情况下,找到罪犯代码的最简单方法是在Windows上启用Paged Heap,如果在Unix上则启用Electric Fence。这将在确切位置破坏您的可执行文件。