Je suis la conversation d'un peu loin et je me dis que j'allais tester ce que donne ton code dans Dr Memory. J'ai rajouté un free() pour ne laisser que l'erreur d'accès hors des bornes de la zone malloqué :
J'obtiens comme rapport d'erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main(void) { int*a = (int*)malloc(10*sizeof(int)); a[10] = 50; // overflow free(a); }
En revanche, il n'est pas plus capable que valgrind de détecter l'erreur si on accède hors des bornes d'un vrai tableau...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Dr. Memory version 1.5.1 build 6 built on Feb 25 2013 00:45:31 Application cmdline: ""D:\Users\pgradot\Documents\C\main.exe"" Recorded 75 suppression(s) from default C:\Program Files (x86)\Dr. Memory\bin\suppress-default.txt Error #1: UNADDRESSABLE ACCESS: writing 0x003b0f80-0x003b0f84 4 byte(s) # 0 main Note: @0:00:00.251 in thread 4644 Note: next higher malloc: 0x003b1938-0x003b1b58 Note: refers to 1 byte(s) beyond last valid byte in prior malloc Note: prev lower malloc: 0x003b0f58-0x003b0f80 Note: instruction: mov $0x00000032 -> (%eax) DUPLICATE ERROR COUNTS: SUPPRESSIONS USED: ERRORS FOUND: 1 unique, 1 total unaddressable access(es) 0 unique, 0 total uninitialized access(es) 0 unique, 0 total invalid heap argument(s) 0 unique, 0 total GDI usage error(s) 0 unique, 0 total warning(s) 0 unique, 0 total, 0 byte(s) of leak(s) 0 unique, 0 total, 0 byte(s) of possible leak(s) ERRORS IGNORED: 60 still-reachable allocation(s) (re-run with "-show_reachable" for details) Details: d:\Users\pgradot\AppData\Roaming\Dr. Memory\DrMemory-main.exe.3224.000\results.txt
Partager