DELPHI 自定义数组操作 内存错误 求助

procedureTForm1.spcommReceiveData(Sender:TObject;Buffer:Pointer;BufferLength:Word);//... procedure TForm1.spcommReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word); //这是读串口数据控件中的数据到达方法
var
rbuf:array of word;
temp:Integer;
begin
if BufferLength mod 2<>0 then
begin
Exit;
end;
SetLength(rbuf,temp);
move(buffer^,rbuf,4);
for temp:=1 to (BufferLength div 2)-1 do
begin
showmessage(inttostr(rbuf[temp])); //内存错误在这行,就是对自定义数组的调用
end;
end;
展开
 我来答
己闻楣Sx
2011-04-20 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:908万
展开全部
1、SetLength(rbuf, temp);有问题,temp没有被初始化,而它被临时构建在堆栈上,将是随机数(倒不是默认为0,称为“你不确知的数儿”更好理解),如果恰好数儿很大,超过了内存限制,则执行该句就会报内存不足错误,如果恰好是0,则必在后面的数组遍历中报内存访问错误;猜测程序意图,应该是SetLength(rbuf,BufferLength div 2);
2、rbuf的定义是动态数组,动态数组的下标从0开始,下面的for temp := 1 to...的写法并未遍历数组所有元素,虽不是导致内存错误的原因,但估计是逻辑失当。
3、move(buffer^,rbuf,4);这句也有疑问,猜测程序逻辑,应该是move(buffer^,rbuf,BufferLength);,还有,可读性稍差,最好写成move(buffer^,rbuf[0],BufferLength);
4、if BufferLength mod 2<> 0 then这句并不全面,当BufferLength就是0,也能继续执行,当毫无疑问,继续执行没有意义,所以应当追加一个条件,即if ( BufferLength mod 2 <> 0 ) or ( BufferLength = 0 ) then
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renzhumin2
2011-04-20 · TA获得超过163个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:272万
展开全部
showmessage(inttostr(rbuf[temp]));
temp 没有初始化,溢出了。

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
READData:string;
begin
setlength(READData,bufferlength);

move(Buffer^,pchar(READData)^,bufferlength);

showmessage(READData);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seanpim
2011-04-20 · TA获得超过122个赞
知道小有建树答主
回答量:538
采纳率:100%
帮助的人:116万
展开全部
SetLength(rbuf,temp);
执行这句的时候temp还没有初始化,默认是0.所以你的数组长度是0.
后面执行任何读取操作都会溢出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ysjqrmpv
2011-04-20 · TA获得超过116个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:205万
展开全部
SetLength(rbuf,temp);//这里的temp是多少。。。并不知道可能默认就是0
move函数是怎么用我不了解,,你看一下是不是这里的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式