0

我正在尝试从一个类中打印一些数据,并且它打印得很好,直到他达到整数然后抛出一个堆损坏错误。谁能向我解释为什么会这样做?

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 会导致堆错误。

4

3 回答 3

2

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

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

于 2012-08-18T22:44:25.730 回答
0

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

于 2012-08-18T22:45:19.373 回答
0

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

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

于 2012-08-18T23:08:15.083 回答