【问题标题】:Segmentation Fault || Access Violation Writing location分段错误 ||访问冲突写入位置
【发布时间】:2012-11-01 13:31:53
【问题描述】:

我想在双向链表中插入一个节点。我通过了位置,多项式的新系数及其幂。我没有编译错误,但是当我使用 Visual Studio 运行它时,我在 linux (g++) 中遇到了分段错误和访问冲突写入位置。

Program.exe 中 0x00bd20ba 处未处理的异常:0xC0000005:访问冲突写入位置 0xcdcdcdd9。

void Polynomial::insert( Term *pos, double newCoefficient, int power )
{
    Term *newTerm = new Term; // create a new node to insert

    // Link the new node to previous and next, given the position
    newTerm->prev = pos->prev;
    newTerm->next = pos;
    newTerm->prev->next = newTerm; // Here's where I'm getting the error
    newTerm->next->prev = newTerm;

    // change the coefficient and power
    newTerm->coefficient = newCoefficient;
    newTerm->power = power;
}

我做错了什么,我该如何解决?

【问题讨论】:

  • 地址0xcdcdcdd9 上面写满了调试填充器。在取消引用它们(或为此分配它们)之前验证您的输入。

标签: c++ linked-list segmentation-fault fault


【解决方案1】:

好吧,如果pos 是第一个节点,那么pos->prev 必须是NULL。在这种情况下,newTerm->prev->next = newTerm; 语句会崩溃,因为没有 NULL->next 这样的东西!

您应该明确检查pos 是否是列表中的第一个节点,并相应地放置newNode

// Link the new node to previous and next, given the position
newTerm->prev = pos->prev;
newTerm->next = pos;
if(pos->prev) newTerm->prev->next = newTerm;
newTerm->next->prev = newTerm;

【讨论】:

  • 谢谢。我完全忘记了。
【解决方案2】:

pos->prev 可能为 NULL 或未初始化。您必须在使用之前验证您的输入...

【讨论】:

    【解决方案3】:

    请检查在执行程序的任何实例中是否 pos 可以是列表中的第一个节点。如果是,那么当您访问 NULL 指针的成员时,它将导致分段错误。

    在编程时始终考虑极端情况,并确保为它们添加了所需的条件。

    【讨论】:

      【解决方案4】:

      我想知道你为什么要自己实现一个双向链表。您可以定义一个包含coefficientpower 成员的structclass,并将其用作std::list 的值类型。这将为您免费提供许多列表操作(例如插入和删除元素)。作为奖励,std::list 带有适当的迭代器(而不是位置指针),可在标准算法中使用。

      由于您的 Polynomial 类的其余部分缺失(它是一个类,而不仅仅是一个命名空间,对吗?)很难提供更具体的帮助。

      【讨论】:

        【解决方案5】:

        当您尝试取消引用 NULL 指针时,通常会发生分段错误。

        在处理指针时使用 NULL 检查被认为是一种很好的做法。在这种情况下,似乎 pos->prev 是 NULL,这会导致分段错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          • 2015-08-15
          相关资源
          最近更新 更多