【问题标题】:Why: error: array subscript is above array bounds为什么:错误:数组下标高于数组边界
【发布时间】:2014-03-12 20:42:56
【问题描述】:

我查看了堆栈溢出中的其他条目,但它们确实“超出”了界限。

在我的代码中,我在一系列嵌套结构中蜿蜒前行:

static inline void * get_resp_ptr(U32 blade_ix, U32 q_id)
{
    per_blade_data *  bd  = bfr_blade_data + blade_ix;
    bfr_pendcmd_q_t * pcq = bd->bfrpb_ques + q_id;
    response_t *      res = pcq->bfrpq_resp;
    return (void *)(res + pcq->bfrpq_resp_rdix);
}

"bfrpq_resp" 是一个指向 response_t 类型的指针。此函数的最后两行 both 得到错误消息。让我大吃一惊....关于编译器想说什么的任何猜测?我很想投入 uintptr_t 并只使用算术。 :(

编辑:那没用。将 pcq->bfrpq_resp 分配给 uintptr_t 会导致相同的错误消息。仅仅引用该字段就会产生结果。我认为 GCC 需要在这里提供不同的错误消息。

【问题讨论】:

    标签: arrays gcc gcc-warning


    【解决方案1】:

    可能是因为http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45978,如果你的gcc版本低于4.7.0

    【讨论】:

    • 可以想象。我有点怀疑,因为我没有在那条线上索引 bfrpq_resp 。直到返回声明。再说一次,我正在使用:mips64-octeon-linux-gnu-gcc(Cavium Inc. 版本:2_3_0 build 116)4.3.3,对于那个错误来说可能太旧了;)。另一种可能性是关于 bfrpb_ques + q_id 的一些混淆。那是一个由 9 个元素组成的数组,其中 q_id 始终作为常量 0 到 8 传递。我会运行它.....
    【解决方案2】:

    由我自己的编码触发的 GCC 错误。 GCC 指向那条线,但问题是由绊倒的手指引起的前一行。谢谢你。我不会提交 GCC 错误,因为 4.3.3 有点长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多