Problème de libération de mémoire
2 sujets de 1 à 2 (sur un total de 2)
-
Bonjour à tous,
J’ai un programme qui ne semble pas libérer correctement la mémoire. Le système (MOS2.1) affiche dans les logs des exceptions du type :
TLSF_FreeMem: ptr 0x297fdb88 wrong size 13 (memory was allocated for 602975385-602975400 bytes)
Task 0x238c2e00 Name 0x298265ec
Type 13 Pri 0 Flags 0x8 State 2 IDNestCnt -1 TDNestCnt -1
SigAlloc 0xc000ffff SigWait 0x10000000 SigRecvd 0x00800100 SigExcept 0x00000000
ExceptCode 0x10100130 ExceptData 0x00000000 TrapCode 0x10100128 TrapData 0x00000000
Switch 0x00000000 Launch 0x00000000 UserData 0x00000000
SPLower 0x289f760c SPUpper 0x289f860c SPReg 0x289f85a4
ETask 0x22e34314
MemPool 0x25966f18 PPCLibData 0x00000000
PPCSPLower 0x2373951c PPCSPUpper 0x23741510
PPCRegFrame 0x23741030
Private[] 0x00000000 0x00000000 0x00000000 0x00000000
EmulHandle 0x00000000
EmulHandle 0x23741420 Type 0x00000004 Flags 0x00000001
SRR0 0x10125b90 SRR1 0x02007030
LR 0x101163d8 CTR 0x25ab8754
CR 0x28002242 XER 0x20000000
GPR[00] 25ab75c8 2373fdd0 23741420 00000001 23740448 297c3c90 237404d0 00000069
GPR[08] 29818f10 28a046a2 23740458 28a046a2 28002244 28a052c0 00000019 00000019
GPR[16] 08b5e333 23740c90 00000000 238c3ee4 238c2ee4 238c3ee0 0000000a 08e30bb9
GPR[24] 20001948 22e34314 238c2e00 00000000 10020010 10100000 237401d8 23741030
CTR -> Rival.debugger Hunk 1 Offset 0x0004e6cc
PPCStackFrame History:
StackFrame[0].LR-> Address 0x10124554
StackFrame[-1].LR-> Address 0x10110198
StackFrame[-2].LR-> Address 0x1010c140
StackFrame[-3].LR-> Address 0x10110efc
StackFrame[-4].LR-> Address 0x25a9a3a8 -> Rival.debugger Hunk 1 Offset 0x00030320
StackFrame[-5].LR-> Address 0x25a6ac24 -> Rival.debugger Hunk 1 Offset 0x00000b9c
StackFrame[-6].LR-> Address 0x25a746bc -> Rival.debugger Hunk 1 Offset 0x0000a634
StackFrame[-7].LR-> Address 0x25a73ee8 -> Rival.debugger Hunk 1 Offset 0x00009e60
StackFrame[-8].LR-> Address 0x25a739dc -> Rival.debugger Hunk 1 Offset 0x00009954
StackFrame[-9].LR-> Address 0x25a72598 -> Rival.debugger Hunk 1 Offset 0x00008510
StackFrame[-10].LR-> Address 0x25a6a560 -> Rival.debugger Hunk 1 Offset 0x000004d8
StackFrame[-11].LR-> Address 0x25a6a3f0 -> Rival.debugger Hunk 1 Offset 0x00000368
StackFrame[-12].LR-> Address 0x25a6a324 -> Rival.debugger Hunk 1 Offset 0x0000029c
StackFrame[-13].LR-> Address 0x1029d1e0
StackFrame[-14].LR-> Address 0x102a1d0c
StackFrame[-15].LR-> Address 0x102a1a04
StackFrame[-16].LR-> Address 0x10312304
StackFrame[-17].LR-> Address 0x1030e558
StackFrame[-18].LR-> Address 0x1030d6d4
StackFrame[-19].LR-> Address 0x1030d0f8
StackFrame[-20].LR-> Address 0x10293950
Full PPC mode: Last 68k context
PC 87654321 SR 0008
Dn[0] 0000000d 237403a0 0000000f 0a5ff6f8 08dd010c fffffffe 22d6de8d 23740880
An[0] 238c2e00 297fdb88 23740008 00000000 00000019 00000019 20001948 289f8604
Stack: 0x289f8604
A7[-32] 22d12920 20bd6d7c 287dfe00 22d12620
A7[-16] 20b4ed94 28888008 00000000 1132b820
A7[000] 00001000 238c3ee0 00000000 289f75e8
Last saved PPCThread State:
SRR0 0x10125c2c SRR1 0x200f030 LR 0x10116594 R1 0x237403b0
GPR[00] 25ab75c8 237403b0 23741420 00000001 23740448 297c3c90 237404d0 00000069
GPR[08] 29818f10 28a046a2 23740458 28a046a2 28002244 28a052c0 00000019 00000019
GPR[16] 08b5e333 23740c90 00000000 238c3ee4 238c2ee4 238c3ee0 0000000a 00000004
GPR[24] ffffffff 20001af0 20001aec 00000000 ffffffff 88002242 237403b8 20001948
CTR -> Rival.debugger Hunk 1 Offset 0x0004e6cc
SegList 0x08dd68e2 GlobVec 0x2002aba4
StackBase 0x0a27dd83 StackSize 0x00001000
TaskNum 0x00000005 Result2 0x00000000
CurrentDir 0x09caeca8 CIS 0x08b7b695
COS 0x08b8721d CES 0x08b75c51
CLI 0x08dd6a1d ReturnAddr 0x289f8604
PktWait 0x00000000 WindowPtr 0x00000000
HomeDir 0x0965c730 Flags 0x00000044
ExitCode 0x00000000 ExitData 0x00000000
Arguments 0x297c1244 ShellPrivate 0x00000000
NEW_Alert: MsgPort 0x237405b0
NEW_Alert: Task 0x238c2e00
NEW_Alert: Msg 0x23740590
NEW_Alert: AlertMsgPort 0x200c84e0
NEW_Alert: Send Msg
NEW_Alert: Wait Msg
NEW_Alert: Replied Msg 0x23740590
NEW_Alert: continue
Dans cet exemple, la libération concerne une zone mémoire de 3 ULONG, soit 12 octets. L’exception semble indiquer une incohérence entre ce qui a été alloué et ce qui est libéré (« wrong size 13 » et « 602975385-602975400 bytes »), mais cela ne correspond pas à la réalité et je ne vois pas d’où peut provenir le problème à part dans le système de détection d’erreur mémoire.
Savez-vous comment il faut interpréter ce type d’exception pour résoudre le problème ?
Merci d’avance.
Utiliser le memtracker.
2 sujets de 1 à 2 (sur un total de 2)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Problème de libération de mémoire