为何保存数据不对,请教.^o^

ibmnetxj 2006-05-09 11:30:06
有三排编辑盒,,分别为-----edt01至edt08,edt11至edt18,edt21至edt28,,
输入数据后,不点保存,读出没有问题。
但一点保存后,读出数据就成为

edt01=0 edt11=edt08 edt21=edt18
edt02=edt01的数据 12=11 22=21
edt03=edt02的数据 13=12 23=22
4=3 14=13 24=23
5=4 . .
. . .
. . .
. . .
8=7 18=17 28=27

源程序如下:
// 保存

void __fastcall Tset__cs::btn1Click(TObject *Sender)
{
FILE *fp;
fp=fopen("e:\\setcs01data.xj","w+b");

float a;int i,j;
TEdit *tmpEdit;
for(i=0;i<=2;++i)
for(j=1;j<=8;++j)
{
tmpEdit = (TEdit *)FindComponent("edt" +IntToStr(i)+IntToStr(j));
a=StrToFloat(tmpEdit->Text);
fwrite(&a, sizeof(float), 1, fp);
}
tmpEdit = NULL;
delete tmpEdit;
fclose(fp);
Application->MessageBox("保存成功!","保存提示框",MB_OK);

}


再次谢谢!
...全文
141 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2006-05-10
  • 打赏
  • 举报
回复
晕,既然tmpEdit = NULL;那么delete tmpEdit;就是delete NULL;在C++里面这个应该是一个空操作,怎么会释放EDIT呢?楼上各位搞错了。

问题要一分为二看,这样写确实有问题,但是却不是楼主出现问题的根源!
CACACACACA 2006-05-10
  • 打赏
  • 举报
回复
另外
tmpEdit = NULL;
delete tmpEdit;
EDIT已经被释放了,还怎么再用EDIT显示呢?即使当时没有报错,(我这关闭FORM的时候,每次都报错.)以后也会造成内存访问错误.
CACACACACA 2006-05-10
  • 打赏
  • 举报
回复
tmpEdit = NULL;
delete tmpEdit;
这太危险了. 在FORM上显示的元件,怎么能这么就删除了呢?这两句不能要呀!


下面的代码我测试过了.没能问题.供参考.看看你的代码是哪有问题.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "stdio.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TEdit *edit[3][8];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int y=0;
for(int i=0; i<3; i++)
for(int j=0; j<9; j++)
{
edit[i][j] = new TEdit(this);
edit[i][j]->Top = i*21;
edit[i][j]->Left = j*121;
edit[i][j]->Name = "edt" + IntToStr(i) + IntToStr(j+1);
edit[i][j]->Parent = this;
edit[i][j]->Text = y;
y++;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
for(int i=0; i<3; i++)
for(int j=0; j<9; j++)
{
delete edit[i][j];
edit[i][j]=NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp;
fp=fopen("c:\\setcs01data.xj","w+b");

float a;
int i,j;
TEdit *tmpEdit;
for(i=0;i<3;++i)
for(j=1;j<9;++j)
{
tmpEdit = (TEdit *)FindComponent("edt" +IntToStr(i)+IntToStr(j));
a=StrToFloat(tmpEdit->Text);
fwrite(&a, sizeof(a), 1, fp);
}
fclose(fp);
Application->MessageBox("保存成功!","保存提示框",MB_OK);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
for(int i=0;i<this->ControlCount;i++)
{
if( dynamic_cast<TEdit *>(Controls[i]) )
{
((TEdit *)Controls[i])->Text = "";
}
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
FILE *fp;
float x=0;
fp=fopen("c:\\setcs01data.xj","r");
for(int i=0; i<3; i++)
for(int j=0; j<9; j++)
{
fread( &x, sizeof(x), 1, fp );
edit[i][j]->Text = x;
}
fclose( fp );
}
//---------------------------------------------------------------------------

铖邑 2006-05-10
  • 打赏
  • 举报
回复
不去掉,也没发现会怎样啊
当然这些写是不对的
3996906 2006-05-10
  • 打赏
  • 举报
回复
jiangshx(寻平阳) ( ) 已经说了解决方法。。

这里
tmpEdit = NULL;
delete tmpEdit;
都可以去掉。。

多说一句。。
我们释放的时候一般是先
delete tmpEdit;
再tmpEdit = NULL;
铖邑 2006-05-10
  • 打赏
  • 举报
回复
读出来的程序在哪?
ibmnetxj 2006-05-10
  • 打赏
  • 举报
回复
我会继续努力
ibmnetxj 2006-05-10
  • 打赏
  • 举报
回复
谢谢大家,
jiangshx 2006-05-10
  • 打赏
  • 举报
回复
去掉delete tmpEdit;
CACACACACA 2006-05-10
  • 打赏
  • 举报
回复
另外
tmpEdit = NULL;
delete tmpEdit;
EDIT已经被释放了,还怎么再用EDIT显示呢?即使当时没有报错,(我这关闭FORM的时候,每次都报错.)以后也会造成内存访问错误.
=----------------------------
我也够晕的.楼上说的对.

604

社区成员

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

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