一个ListView的奇怪问题!!

qila 2003-10-21 09:46:19
写了一个程序,点击按钮则清除上次ListView中的显示,装入新的数据并显示,大概程序如下:
void __fastcall TForm2::Button3Click(TObject *Sender)
{
if(Buffer)delete Buffer;
ListView1->Items->Clear();//清除缓冲区并把ListView清空
...............//读出新的数据并保存到缓冲区中
for(i=0;i<ReadByte;i++)
{//显示
int temp;
TListItem *AddItems;
Data=Buffer[i];
AddItems=ListView1->Items->Add();
AddItems->Caption=IntToStr(i);
float vlot;
vlot=FileData.TempTure;
AnsiString s;
AddItems->SubItems->Add(FormatFloat("#.##",vlot));
AddItems->SubItems->Add(IntToStr(FileData.Smoke));

}
开始运行很正常,但点了几次之后就出现了异常错误,ListView无法显示,不知道这是怎么回事情,是不是在ListView的使用上有什么问题?
...全文
34 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfemil 2003-10-21
  • 打赏
  • 举报
回复
buffer 变量的定义原形是什么?
qila 2003-10-21
  • 打赏
  • 举报
回复
出现External Exception C0000008
qila 2003-10-21
  • 打赏
  • 举报
回复
delete 之后buffer就是为null,你可以用跟踪变量看就知道了,加上那句是多此一举!
我在程序中省了读出并放入缓冲的语句,这个肯定没有问题的!
sfemil 2003-10-21
  • 打赏
  • 举报
回复
程序编写不符和规范。 呵呵

如:
if(Buffer)delete Buffer;
释放完成之后 没有执行 Buffer = NULL;操作。

然后在循环中执行 Data=Buffer[i];操作。 明显是访问了无效的内存。并且Buffer是什么类型的 在这里看不出来 我猜应该是数组 所以你执行的释放操作错误 应该是 delete [] Buffer

建议你再仔细看看。
qila 2003-10-21
  • 打赏
  • 举报
回复
buffer没问题呀!!我开始也以为是这个问题!!后来发现不是!
ccrun.com 2003-10-21
  • 打赏
  • 举报
回复
晕。看错了。好象不是这个毛病。
ccrun.com 2003-10-21
  • 打赏
  • 举报
回复
每次循环你都是添加SubItems,当然是越添越多,都挤到后面去了。
SubItems只需要添加一次就行了。

第二次以后直接操作
SubItems->Strings[0]="fdfsfds";
SubItems->Strings[1]="fdsafs";就可以了。
duduwolf 2003-10-21
  • 打赏
  • 举报
回复
你用debug跟踪以下,看看是哪里出错了,我怀疑是if(Buffer)delete Buffer;或者Data=Buffer[i];这两句有出现缓冲溢出错误的可能
qila 2003-10-21
  • 打赏
  • 举报
回复
哈哈,问题解决!!原来是硬盘有错误,扫描了一下硬盘一不小心就好啦!!哎,小问题花了我那么长时间,真倒霉!不过要谢谢大家!!接分!!

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧