内存读错误各位怎么调试,有什么好的方法

suigui 2002-12-18 05:23:46
'accces violation at 0x012d8d22: read of address ox00000ffe'
程序在运行了一段时间后,就报这个错误。跟踪不到,各位一般遇到这个问题,一般怎样做。越多方法越好,可以加分。谢谢先

...全文
117 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
suigui 2002-12-19
  • 打赏
  • 举报
回复
下面是探测的结果:(logdll是自己写的一个dll。里面new了个数据模块窗体)
Error 00095. 0x340010 (Thread 0x05D8):
Resource from different RTL:
SysFreeMem(0x0373FB80)

Call Tree:
0x013DB1E9(=logdll.dll:0x07:1324A85)
0x013DB0ED(=logdll.dll:0x07:1324989)
0x013E2CD6(=logdll.dll:0x07:132C572)
0x013E2952(=logdll.dll:0x07:132C1EE)
0x01341483(=logdll.dll:0x07:128AD1F)
0x77F8B85E(=ntdll.dll:0x01:00A85E)

The memory block (0x0373FCB0) [size: 88 bytes] was allocated with malloc
Call Tree:
0x013E2E20(=logdll.dll:0x07:132C6BC)
0x013E2FC0(=logdll.dll:0x07:132C85C)
0x0CD0E52B(=CG32.DLL:0x01:00D52B)
0x0134CB79(=logdll.dll:0x07:1296415)
0x01345765(=logdll.dll:0x07:128F001)
0x013436AC(=logdll.dll:0x07:128CF48)

------------------------------------------
Functions called:
fflush (1 times)
delete (19 times)
vsnprintf (8 times)
free (14 times)
strcat (108 times)
sprintf (24458 times)
strftime (12175 times)
gmtime (12175 times)
memset (12175 times)
strtol (1052264 times)
strstr (24350 times)
strcpy (48704 times)
new (19 times)
SysReallocMem (24387 times)
SysFreeMem (61319 times)
SysGetMem (61320 times)
lstrlenA (1 times)
lstrcpynA (4 times)
calloc (1 times)
malloc (12186 times)
strlen (81 times)
memcpy (2 times)
Resource types used:
object (19 allocs, 19 max)
memory block (73507 allocs, 12538 max)
Modules used:
00400000 12/18/2002 18:07:54 E:\Work\LogProcessDll\Receive\SNSLogDaemon.exe
01810000 08/09/2002 22:00:00 C:\Program
Files\Borland\Delphi7\Bin\borlndmm.dll
0CD00000 02/01/2002 22:00:00 C:\PROGRA~1\Borland\CBUILD~1\Bin\CG32.DLL
1F7B0000 02/19/2002 16:36:30 C:\WINNT\System32\odbc32.DLL
1F850000 02/19/2002 16:36:32 C:\WINNT\System32\odbcint.dll
37F00000 09/20/2001 20:02:00 D:\Tool Files\Kingsoft\XDict\Cjktl32.dll
6DD30000 12/14/2001 19:47:16 C:\WINNT\System32\INDICDLL.dll
70BD0000 08/17/2001 22:43:40 C:\WINNT\system32\SHLWAPI.DLL
71780000 08/17/2001 22:43:40 C:\WINNT\system32\COMCTL32.DLL
74F50000 05/04/2001 20:05:02 C:\WINNT\system32\msafd.dll
74F90000 05/04/2001 20:05:02 C:\WINNT\System32\wshtcpip.dll
74FA0000 12/14/2001 19:48:28 C:\WINNT\System32\WS2HELP.DLL
74FB0000 05/04/2001 20:05:02 C:\WINNT\System32\WS2_32.DLL
74FD0000 05/04/2001 20:05:02 C:\WINNT\System32\WSOCK32.DLL
75010000 05/04/2001 20:05:02 C:\WINNT\system32\MPR.dll
75950000 12/14/2001 19:47:24 C:\WINNT\system32\LZ32.DLL
75E00000 05/04/2001 20:05:02 C:\WINNT\System32\IMM32.DLL
76AF0000 05/04/2001 20:05:02 C:\WINNT\system32\comdlg32.dll
777E0000 12/14/2001 19:48:18 C:\WINNT\system32\VERSION.DLL
77990000 05/04/2001 20:05:02 C:\WINNT\system32\OLEAUT32.DLL
77A30000 05/04/2001 20:05:02 C:\WINNT\system32\OLE32.DLL
77D20000 05/04/2001 20:05:02 C:\WINNT\system32\RPCRT4.DLL
77D90000 05/04/2001 20:05:02 C:\WINNT\system32\ADVAPI32.DLL
77DF0000 05/04/2001 20:05:02 C:\WINNT\system32\USER32.dll
77E60000 05/04/2001 20:05:02 C:\WINNT\system32\KERNEL32.DLL
77F40000 05/04/2001 20:05:02 C:\WINNT\system32\GDI32.DLL
77F80000 05/04/2001 20:05:02 C:\WINNT\System32\ntdll.dll
78000000 05/04/2001 20:05:02 C:\WINNT\system32\MSVCRT.DLL
785C0000 05/04/2001 20:05:02 C:\WINNT\system32\SHELL32.DLL
FFFA5F3F 12/10/2002 12:38:42 C:\Program Files\Common Files\Borland
Shared\BDE\IDAPI32.DLL
FFFF3764 12/18/2002 18:15:42 E:\Work\LogProcessDll\logdll.dll
FFFF5B74 12/10/2002 12:38:40 C:\Program Files\Common Files\Borland
Shared\BDE\BANTAM.DLL
FFFFCB74 12/10/2002 12:38:42 C:\Program Files\Common Files\Borland
Shared\BDE\IDR20009.DLL
==========================================
还有就是写了个如下函数,用了gmtime函数,打开codeguard测试程序,运行一段时间退出时,报道下面函数和gmtime函数有问题。
char *__fastcall TLogProcess::time2str( time_t t )
{ //typedef long time_t
static char buf[ 4 ][ 0x20 ];
static int i = 0;
struct tm *ti;

i = ( i + 1 ) % 4;
ti = gmtime( &t );
strftime( buf[ i ], 0x20, "%Y-%m-%d, %H:%M:%S", ti ); //Formats time for output.
// area = localtime(&t);

return buf[ i ];
}
//---------------------------------------------------------------------------
各位老大帮忙看看。
NowCan 2002-12-19
  • 打赏
  • 举报
回复
没看出来。
不过,这样写的用以何在?为什么要那个二维数组?
zywx 2002-12-18
  • 打赏
  • 举报
回复
检查一下你的代码有没有定义了指针而没有用new申请内存空间,就负值或写数据的地方,或者数组越界等,如下面的代码

char *buf;
buf[1]='a';

运行的时候,开始可能不会报错,但是多次调用肯定会出错。
NowCan 2002-12-18
  • 打赏
  • 举报
回复
换一台机器看看,是不是硬件出问题了?
invalid 2002-12-18
  • 打赏
  • 举报
回复
CodeGurad用了,没有探测到什么内存问题吗?
invalid 2002-12-18
  • 打赏
  • 举报
回复
应该是访问了不该访问的地址:
1.使用了野指针.参见上面我说的.
2.某个对象没有new就使用了.
rikky 2002-12-18
  • 打赏
  • 举报
回复
to invalid(空心菜之2.0开发中)

CodeGuard我们也用了,还是没法解决,现在根本就不知道什么地方的原因,也捕捉不到,痛苦!
weibz0525 2002-12-18
  • 打赏
  • 举报
回复
动态内存出现的错误,这种错误只会在程序执行才会被检测出来,我也要过这样的教训。查看你所有new的变量,是否用到了空指针,或者没附值,或者没释放。或者。。。。
rikky 2002-12-18
  • 打赏
  • 举报
回复
to NowCan

我们现在老是也出现这个内存地址冲突,好象根本不是你说的指针问题,而且问题根本无法捕捉,是不是会出现?最令人无法忍受的是我们的开发环境下几乎不再出现这种现象,但是给客户的话就会出现这个问题。

有人能知道原因吗?高手们!!
invalid 2002-12-18
  • 打赏
  • 举报
回复
用CodeGuard探测,可能会追踪到.
使用指针应该是先赋NULL值,然后使用,在使用前判断一下是否为NULL.
delete后要赋值为NULL.
Taiji02 2002-12-18
  • 打赏
  • 举报
回复
今天时间不够明天来。
NowCan 2002-12-18
  • 打赏
  • 举报
回复
没什么好办法,这个基本上和指针有关。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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