【问题标题】:Qt read acces violation at:0x0, flags=0x0 (first chance)Qt 读取访问冲突:0x0,flags=0x0(第一次机会)
【发布时间】:2013-08-05 09:55:55
【问题描述】:

我有一段非常简单的代码如下:

Letter* Vakje::geefLetter() const
{
    return m_letter;
}

Vakje 类被初始化为 m_letter 的 NULL 指针,但我仍然收到读取访问冲突错误,有人可以帮忙吗?

这是调用函数的代码:

bool Spelbord::positionIsEmpty(int rij, int kolom) { 
    if (vakjes[rij][kolom]->geefLetter()==nullptr) return true;
    else return false; 
}

【问题讨论】:

  • 您还期待什么?访问 NULL 的指针是未定义的行为,这在大多数情况下意味着“程序崩溃”[对于 UB 并非总是如此,但在这种情况下,非常典型]。
  • 我看不到支票。我们是否应该猜测您的某些代码在某处进行了空检查?我们还应该猜什么?
  • 向我们展示周围的代码。即,什么在调用它,什么在使用结果。
  • 请编辑您的问题以包含相关代码。不要将其隐藏在 cmets 中。你确定“表”有非空的 Vakje-s 吗?
  • 那么回答这个问题:尺寸是多少?当它崩溃时,它在(索引)上崩溃了什么?可能是 Vakje 是空的吗?你检查了吗?启动调试器并告诉我们。 (OT:我可以建议你开始用英语而不是荷兰语编程。你以后会感谢我的)。

标签: c++ qt pointers null


【解决方案1】:

如果 vakjes[rij][kolom]NULL,则尝试取消引用该指针 -> 会导致未定义的行为(通常:崩溃)。

只需将代码更改为:

bool Spelbord::positionIsEmpty(int rij, int kolom) { 
  if (vakjes[rij][kolom] == nullptr) return true;
  if (vakjes[rij][kolom]->geefLetter()==nullptr) return true; 

  return false; 
}

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多