setLength 动态数组,内存报错解决思路
setLength 动态数组,内存报错
我定义了一个字符型的动态数组,第一次调用setLength分配空间后接着再调用setLength(pData,0)撤销数组分配是没有问题的,但是当我用copymemory(@pData,pSource,len)后,再调用setLength(pData,0)就抱错了,请会各位高手这是怎么回事,如何解决?急等
------解决方案--------------------
应该不会, 比如:
procedure TForm1.Button1Click(Sender: TObject);
var
AByteArray : array of Byte;
sTemp : String;
iLoop : Integer;
begin
sTemp := 'Hello, world! ';
SetLength(AByteArray, Length(sTemp));
CopyMemory(@AByteArray[0], @sTemp[1], Length(sTemp));
for iLoop := 0 to High(AByteArray) do
ShowMessage(Format( 'AByteArray[%d] = %d ', [iLoop, AByteArray[iLoop]]));
SetLength(AByteArray, 0);
AByteArray := nil;
end;
应该是你的代码有问题。
我定义了一个字符型的动态数组,第一次调用setLength分配空间后接着再调用setLength(pData,0)撤销数组分配是没有问题的,但是当我用copymemory(@pData,pSource,len)后,再调用setLength(pData,0)就抱错了,请会各位高手这是怎么回事,如何解决?急等
------解决方案--------------------
应该不会, 比如:
procedure TForm1.Button1Click(Sender: TObject);
var
AByteArray : array of Byte;
sTemp : String;
iLoop : Integer;
begin
sTemp := 'Hello, world! ';
SetLength(AByteArray, Length(sTemp));
CopyMemory(@AByteArray[0], @sTemp[1], Length(sTemp));
for iLoop := 0 to High(AByteArray) do
ShowMessage(Format( 'AByteArray[%d] = %d ', [iLoop, AByteArray[iLoop]]));
SetLength(AByteArray, 0);
AByteArray := nil;
end;
应该是你的代码有问题。