2014-03-12 63 views
0

我已經看過堆棧溢出中的其他條目,但它們合法地超出了界限。爲什麼:錯誤:數組下標超出數組範圍

在我的代碼,我纏繞我的方式,通過一系列嵌套的結構:

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的指針。這個函數的最後兩行都是得到錯誤信息。打敗了我......任何有關編譯器試圖說的東西的猜測?我很想投入到uintptr_t中,並使用算術。 :(

編輯:。沒有工作pcq->的bfrpq_resp的uintptr_t中導致相同的錯誤消息的分配僅僅引用域產生的結果,我覺得這裏的GCC需要一個不同的錯誤信息

回答

1

這可能是因爲http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45978,如果你的gcc版本是低於我自己的編碼觸發4.7.0

+0

可以想象。我有點懷疑,因爲我沒有在該行上索引bfrpq_resp。直到返回聲明。然後,我再次使用:mips64-octeon-linux-gnu-gcc(Cavium Inc. Version:2_3_0 build 116)4.3.3,對於那個bug也許太舊了)。另一種可能性是關於bfrpb_ques + q_id的一些混淆。這是一個由9個元素組成的數組,其中q_id總是作爲常數0到8傳遞。我將運行它..... –

0

GCC錯誤。GCC點到該行,但問題是由偶然的手指前行,謝謝。我不會提交GCC bug,因爲4.3.3有點長。