2013-05-31 43 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',现在它似乎正在工作。

通过做老式的打印调试并将我的数组的指针存储在基数变量中来达到那里。他们在那里很好。 (除了阵列的实际内容)

非常有趣搞笑