2013-05-31 51 views
0

有看起來像這樣一個過程:電話SetLength返回nil

procedure blabla; 
var buffer: array of byte; 
begin 
    Setlength(buffer, 10); 
    Setlength(buffer, someinteger); 
end 

兩次調用後緩衝區仍 < - 這是我的問題

我通常認爲自己是一個有經驗的程序員和我在其他各種場合使用這種基本方法。這讓我瘋狂。

過去有沒有人有類似的問題? 如果是這樣,問題是什麼?

我的代碼是有點意大利麪條,因爲我已經改變了,似乎任何可疑行,這裏是全碼:

full procedure

@Edit:

我有另一部分驗證碼在同一個項目:

procedure interleaveVertexes; 
var 
    interleavedArray: array of TVec3Coord2; 
begin 
    SetLength(interleavedArray, vertexcount); 
end; 

和它的作品..喜歡它應該

+0

您確認'someinteger' *真的*非零? –

+0

是的,甚至改變了類型爲無符號。 但是,即使與恆定的'10'它似乎並沒有工作.. 我sooooo困惑 – Banyoghurt

+0

與調試我發現整數實際上是5052 也打開和關閉優化 – Banyoghurt

回答

0

我正在使用gdb和lazarus IDE來調試,顯然..

他們都不喜歡變量稱爲'緩衝區'或'數據'。 我理解lazarus IDE內部使用gdb。

即使是一個名爲'h'的變量也不會讓自己被正確地檢查。 我剛剛將它們重命名爲'buffa'和'howdy',現在它似乎正在工作。

通過做老式的打印調試並將我的數組的指針存儲在基數變量中來達到那裏。他們在那裏很好。 (除了陣列的實際內容)

非常有趣搞笑