用CodeGuard捕捉到程序关闭时的错误,请进来帮忙看看!thx~

yydelphi 2005-05-16 11:16:40
void __fastcall ThreadRecv::Execute()
{ ......
......
while ( !Terminated )
{
......
......
tvSelect.tv_sec = 0;
tvSelect.tv_usec = 500 * 1000;
if ( select(FD_SETSIZE, &fds_t, NULL, NULL, &tvSelect) < 0 )
{
continue;//最后提示出错在这里。
}
......
......
}
}

CodeGuard Log:
Access in freed memory:...
the memory block ... was allocated with SysGetMem. //这里提示在continue
the memory block ... was freed with SysFreeMem.//这里提示在FormDestroy的函数

这是怎么回事?访问已经删除的东西?怎么解决?谢谢
...全文
201 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yydelphi 2005-05-18
  • 打赏
  • 举报
回复
再次感谢JSP大老!
yydelphi 2005-05-17
  • 打赏
  • 举报
回复
感谢JSP老大!
再问一下,我在线程创建的时候让FreeOnTerminatek=True.
在线程结束的时候我在线程中new出来的东西它会不会给我自动delete?
还有,pthread是继承的C++builder中TThread类,那还要不要重新构造析构函数?
继承过来的析构函数能不能把new出来的东西自动delete?
jishiping 2005-05-17
  • 打赏
  • 举报
回复
当 FreeOnTerminatek=True 时,线程执行结束后,VCL 会自动删除这个线程对象,但是在
线程中 new 的其它对象,当然还需要程序自己负责delete
pthread 可以有自己的析构函数,也可以没有自己的析构函数。无论是否有析构函数,自己
在线程中new的东西,还需要程序自己删除。
leonatcs 2005-05-16
  • 打赏
  • 举报
回复
代码不够,再多贴些。
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
the memory block ... was freed with SysFreeMem,这里双击提示在:
/* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { } (Forms.hpp中)
jishiping 2005-05-16
  • 打赏
  • 举报
回复
Error 00017. 0x100430 (r) (Thread 0x0F60):
Access in freed memory: Attempt to access 1 byte(s) at 0x011D3DF4.
vsprintf(0x017DBBC4, 0x0040F122 ["StringToknizer:changed buf='%s'\n"],
0x017DFC04)

Call Tree:
0x00402E37(=LogClient.exe:0x01:001E37) G:\work\logclient02\logclient2\logclient\logfile.cpp#478
0x004088B8(=LogClient.exe:0x01:0078B8) G:\work\logclient02\logclient2\logclient\StringTokinzer.cpp#109

这个说的是logfile.cpp的第478行代码调用vsprintf函数时,地址越界了,访问了越界的
地址中的1个字节。我估计是vsprintf函数的第一个参数指向的内存块不够大(比实际需
要的内存小了1个字节)。
jishiping 2005-05-16
  • 打赏
  • 举报
回复
rror 00097. 0x300010 (Thread 0x0E00):
Resource leak: The file handle (0x3) was never closed

The file handle (0x00000003) [name: 'c:\current.logclient.log'] was opened
with open
Call Tree:
0x00402A06(=LogClient.exe:0x01:001A06) G:\work\logclient2\logclient\logfile.cpp#320

这个说的就是logfile.cpp的第320行代码,打开文件c:\current.logclient.log后没有关闭。
jishiping 2005-05-16
  • 打赏
  • 举报
回复
不知道楼主看明白了上面的错误信息没有。

第一个:
Error 00058. 0x300010 (Thread 0x0FD0):
Resource leak: The object (0x11D3FE0) was never deleted

The object (0x011D3FE0) [size: 1 bytes] was created with new
Call Tree:
0x004080FD(=LogClient.exe:0x01:0070FD) G:\work\logclient02\logclient2\logclient\StringTokinzer.cpp#28
0x0040A03B(=LogClient.exe:0x01:00903B) G:\work\logclient02\logclient2\logclient\thread.cpp#371
0x0040901A(=LogClient.exe:0x01:00801A) G:\work\logclient02\logclient2\logclient\thread.cpp#130

说的就是StringTokinzer.cpp中第28行new的变量没有delete
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
Error 00017. 0x100430 (r) (Thread 0x0F60):
Access in freed memory: Attempt to access 1 byte(s) at 0x011D3DF4.
vsprintf(0x017DBBC4, 0x0040F122 ["StringToknizer:changed buf='%s'\n"],
0x017DFC04)

Call Tree:
0x00402E37(=LogClient.exe:0x01:001E37) G:\work\logclient02\logclient2\logclient\logfile.cpp#478
0x004088B8(=LogClient.exe:0x01:0078B8) G:\work\logclient02\logclient2\logclient\StringTokinzer.cpp#109
0x0040A0A5(=LogClient.exe:0x01:0090A5) G:\work\logclient02\logclient2\logclient\thread.cpp#382
0x0040901A(=LogClient.exe:0x01:00801A) G:\work\logclient02\logclient2\logclient\thread.cpp#130
0x4003601F(=rtl60.bpl:0x01:03501F)
0x400067CE(=rtl60.bpl:0x01:0057CE)

The memory block (0x011D3DEC) [size: 22 bytes] was allocated with SysGetMem
Call Tree:
0x40002FCF(=rtl60.bpl:0x01:001FCF)
0x40115038(=vcl60.bpl:0x01:064038)
0x4010A9A8(=vcl60.bpl:0x01:0599A8)
0x4010AAE0(=vcl60.bpl:0x01:059AE0)
0x4010A9A8(=vcl60.bpl:0x01:0599A8)
0x40037EEA(=rtl60.bpl:0x01:036EEA)

The memory block (0x011D3DEC) was freed with SysFreeMem
Call Tree:
0x40002FEF(=rtl60.bpl:0x01:001FEF)
0x40115038(=vcl60.bpl:0x01:064038)
0x4010A9A8(=vcl60.bpl:0x01:0599A8)
0x4010AAE0(=vcl60.bpl:0x01:059AE0)
0x4010A9A8(=vcl60.bpl:0x01:0599A8)
0x40037EEA(=rtl60.bpl:0x01:036EEA)
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
Error 00051. 0x300010 (Thread 0x0FD0):
Resource leak: The file handle (0x3) was never closed

The file handle (0x00000003) [name: 'c:\current.logclient.log'] was opened
with open
Call Tree:
0x00402A06(=LogClient.exe:0x01:001A06) G:\work\新建文件夹\logclient02\logclient2\logclient\logfile.cpp#320
0x00408BB7(=LogClient.exe:0x01:007BB7) G:\work\新建文件夹\logclient02\logclient2\logclient\thread.cpp#60
0x4003601F(=rtl60.bpl:0x01:03501F)
0x400067CE(=rtl60.bpl:0x01:0057CE)
0x7C80B50B(=kernel32.dll:0x01:00A50B)
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
Error 00058. 0x300010 (Thread 0x0FD0):
Resource leak: The object (0x11D3FE0) was never deleted

The object (0x011D3FE0) [size: 1 bytes] was created with new
Call Tree:
0x004080FD(=LogClient.exe:0x01:0070FD) G:\work\logclient02\logclient2\logclient\StringTokinzer.cpp#28
0x0040A03B(=LogClient.exe:0x01:00903B) G:\work\logclient02\logclient2\logclient\thread.cpp#371
0x0040901A(=LogClient.exe:0x01:00801A) G:\work\logclient02\logclient2\logclient\thread.cpp#130
0x4003601F(=rtl60.bpl:0x01:03501F)
0x400067CE(=rtl60.bpl:0x01:0057CE)
0x7C80B50B(=kernel32.dll:0x01:00A50B)
Functions called:
delete (35 times)
strcmp (3 times)
sscanf (3 times)
strchr (12 times)
strncmp (2 times)
strcpy (3 times)
write (88 times)
strftime (88 times)
vsprintf (88 times)
fstat (89 times)
open (1 times)
access (1 times)
sprintf (91 times)
strlen (241 times)
localtime (179 times)
strncpy (14 times)
time (187 times)
memset (294 times)
vsnprintf (560 times)
SysReallocMem (59 times)
SysFreeMem (2203 times)
SysGetMem (2214 times)
realloc (1 times)
memcpy (4 times)
delete[] (2 times)
free (28 times)
new[] (14 times)
new (47 times)
calloc (5 times)
malloc (25 times)
Resource types used:
file handle (1 allocs, 1 max)
object array (14 allocs, 13 max)
object (47 allocs, 35 max)
memory block (2245 allocs, 1192 max)
jishiping 2005-05-16
  • 打赏
  • 举报
回复
你就不用自己来描述了,我看你自己也说不清。不用在IDE中运行,直接在资源管理器
中运行,第一次出错时,CodeGuard会提示你有错误。程序结束后会产生一个.cgl 结尾
的文件,将它的内容贴出来。
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
这个问题更刚开始我问的不一样了。
我开了CodeGuard运行的话程序关闭时提示错误在continue语句(就是最开始贴的)那里。
不开CodeGuard运行的话一切正常! ??
这个错误好像是:我调用了一个类写读写文件.
LogFile * plogfile = new LogFile;
plogfile->open(..);

用完后我没有plogfile->close(); ???
但是LogFile类的析构函数中我close了的。
最后也delete plogfile了。
开CodeGuard第一次编译运行没这个错误,但是结束程序再编译运行,就有这个错误了。把C++Builder
关了再打开,就又没这个错误了。总之BCB打开程序第一次编译没这个错误。
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
logfile.cpp#320:
#ifdef __WIN32__
file0 = open(currentLogPathName, O_WRONLY|O_CREAT|O_APPEND, S_IREAD|S_IWRITE);
#else
file0 = open(currentLogPathName, O_WRONLY|O_CREAT|O_APPEND, logshare);
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
Error 00097. 0x300010 (Thread 0x0E00):
Resource leak: The file handle (0x3) was never closed

The file handle (0x00000003) [name: 'c:\current.logclient.log'] was opened
with open
Call Tree:
0x00402A06(=LogClient.exe:0x01:001A06) G:\work\logclient2\logclient\logfile.cpp#320
0x0040805B(=LogClient.exe:0x01:00705B) G:\work\logclient2\logclient\thread.cpp#60
0x4003601F(=rtl60.bpl:0x01:03501F)
0x400067CE(=rtl60.bpl:0x01:0057CE)
0x7C80B50B(=kernel32.dll:0x01:00A50B)

------------------------------------------

constantine 2005-05-16
  • 打赏
  • 举报
回复
贴出JSP老大说的东西
jishiping 2005-05-16
  • 打赏
  • 举报
回复
使用CodeGuard时,程序运行结束后,洄游一个.cgl结结尾的文件,用记事本打开就可以了。
贴出这个文件中的内容。同时,他力面的信息,包含了出错的源程序以及相应的行号。将相
应行号附近的代码贴出。
yydelphi 2005-05-16
  • 打赏
  • 举报
回复
但是我这里只有一个线程啊。
代码太多了,不知道怎么贴
我不懂电脑 2005-05-16
  • 打赏
  • 举报
回复
多线程程序在一个线程释放了共享资源后,另一个线程又去访问被释放的资源造成的。
内容概要:本文围绕“可再生能源发电与电动汽车的协同调度策略”展开硕士论文级别的研究与复现工作,基于Matlab平台构建了高比例可再生能源接入背景下电力系统与电动汽车(EV)之间的多间尺度协同优化模型。研究重点在于应对风光发电不确定性,充分利用电动汽车作为移动储能单元的灵活充放电能力(含V2G技术),实现电网削峰填谷、提升新能源消纳效率与系统运行经济性。文中综合考虑了异质电动车集群特性、V2G过程中的损耗约束以及随机因素影响,采用如深度确定性策略梯度(DDPG)强化学习、混合整数线性规划(MILP)等先进优化算法进行求解,并通过基准模型对比验证了所提自适应调度策略在提升电网稳定性、降低运行成本方面的有效性。; 适合人群:具备一定电力系统基础知识、优化理论背景及Matlab编程能力的研究生、科研人员,以及从事新能源并网、智能电网调度、车网互动(V2G)等方向的工程技术人员。; 使用场景及目标:①学习并复现已发表高水平硕士论文中的协同调度建模方法与仿真流程;②掌握将深度强化学习(如DDPG)应用于虚拟电厂、电动汽车集群调度等复杂非线性决策问题的技术路径;③为开展新能源消纳、需求侧响应、微电网优化运行等相关课题的研究提供可复用的代码框架与创新思路参考。; 阅读建议:建议读者结合文中提供的完整Matlab代码与技术文档,深入理解模型构建逻辑、算法实现细节与参数设置依据,优先在Simulink/Matlab环境中运行并调试仿真案例,通过调整场景参数与算法超参,探究不同策略对调度效果的影响,从而深化对协同调度机制与智能优化方法应用的理解。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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