ist ich einige einfache Code in C wurde writting eine Speicherzuweisung und Zeiger zu testen:Valgrind zeigt mehr Speicher zugewiesen, als tatsächlich
#include <stdlib.h>
#include <stdio.h>
int *randomAlloc(int n) {
int *address = NULL, i = 0;
address = malloc (n * sizeof(int));
for (i = 0; i < n ; i++){
*(address + i) = i ;
}
return address;
}
int main(int argc, char* argv[]) {
int *address;
int n;
printf("Type vector size: ");
scanf("%d", &n);
address = randomAlloc(n);
free(address);
}
Doch aus irgendeinem Grund, wenn ich 4 als Eingabe valgrind Ausgänge Typ:
==2375== Memcheck, a memory error detector
==2375== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==2375== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==2375== Command: ./a.out
==2375==
Type vector size: 4
==2375==
==2375== HEAP SUMMARY:
==2375== in use at exit: 0 bytes in 0 blocks
==2375== total heap usage: 3 allocs, 3 frees, 2,064 bytes allocated
==2375==
==2375== All heap blocks were freed -- no leaks are possible
==2375==
==2375== For counts of detected and suppressed errors, rerun with: -v
==2375== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Es gibt nur einen Alloc und einen freien Code. Als n = 4 würde ich erwarten, dass es 4 * 4 (sizeof (int)) = 16 Bytes zuweist. Woher kommt das?
Typ '1' oder' 2' ... es wird immer noch dasselbe sein. Die einzige Sache, die es ändert, ist '2.064 Bytes zugeteilt'. Werfen Sie einen Blick und überlegen Sie, warum. – Michi
Ich kann das beschriebene Verhalten nicht reproduzieren. Wenn ich Ihren Code unter Valgrind erstellen und ausführen, meldet er eine Zuteilung und eine frei, wie Sie es erwarten. –
@JohnBollinger Nicht auf meinem System (Linux Mint). Wenn ich '2' eintippe, habe ich:' Gesamt-Heap-Nutzung: 3 Allocs, 3 Freigaben, 2.056 Bytes allocated' wenn ich '3' schreibe, habe ich:' Gesamt-Heap-Nutzung: 3 Allocs, 3 Frees, 2.060 Bytes allocated' .. ... und so weiter. '2,056' =>' 2,060' => '2064' – Michi