首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

这个访问非法咋这么奇怪,哪位哥能解决下?解决办法

2012-02-23 
这个访问非法咋这么奇怪,哪位哥能解决下????在我的定时器里面有如下程序段:TIniFile *ini new TIniFile(

这个访问非法咋这么奇怪,哪位哥能解决下????
在我的定时器里面有如下程序段:
  TIniFile *ini = new TIniFile(ExtractFilePath(Application->ExeName) + "readSensor.conf");
  std::map<UnicodeString,float> *CmapSensor


std::map<UnicodeString,float>::iterator it = (*CmapSensor).find(Key_Temp_Max);
int i = (*CmapSensor).size();
while(it == (*CmapSensor).end())
{
(*CmapSensor)[Key_Temp_Max] = Value_Temp_Max;
(*CmapSensor)[Key_Temp_Min] = Value_Temp_Min;
(*CmapSensor)[Key_Hum_Max] = Value_Hum_Max;
(*CmapSensor)[Key_Hum_Min] = Value_Hum_Min;
try
{
ini->WriteFloat("setup",Key_Temp_Max,Value_Temp_Max);
ini->WriteFloat("setup",Key_Temp_Min,Value_Temp_Min);
ini->WriteFloat("setup",Key_Hum_Max,Value_Hum_Max);

}
catch(Exception *e)
{
delete ini;
}
break;
}
如果 我加上try{}catch({} 就会出现这样的错误:Access violation at address 0050849E in module 'project1.exe'.write of address *********.但是我把 try{} catch{} 去掉 就不会出现这个错误。调试半天也没发现错误的原因。请各位大哥帮帮忙,谢谢了。

   


[解决办法]
把break;放到catch段内。
[解决办法]
TIniFile *ini = new TIniFile(ExtractFilePath(Application->ExeName) + "readSensor.conf");
// 收到 n 个字节
memset(Buf, 0, 8192);
int n = YbCommDevice1->Read(Buf, 8191);

if (n == 0) return;

这里有点不妥吧,new 的ini还没有删除

----------------------
int Len = ((Buf + n - Ptr - 1) > (sizeof(SensorData) * 2)) ?
(sizeof(SensorData) * 2) : (Buf + n - Ptr - 1);

memcpy(&SD, Ptr + 1, Len);

运行的时候,检查一下Len的值,看是否是预期的
-----------------------------------

另外,建议打开codeguard,对内存问题的调试很有帮助,有时候可能就是内存访问越界,或者是memcpy的时候,多写了几个字节,导致一些不可预料的错误
[解决办法]
某些的地方内存溢出了吧
[解决办法]

C/C++ code
TIniFile *ini = new TIniFile(ExtractFilePath(Application->ExeName) + "readSensor.conf");// 收到 n 个字节memset(Buf, 0, 8192);int n = YbCommDevice1->Read(Buf, 8191);if (n == 0) return; 

热点排行