Это не ваш код; это код запуска, который протекает. Важнейшей информацией для вас является:
==816== LEAK SUMMARY:
==816== definitely lost: 0 bytes in 0 blocks
==816== indirectly lost: 0 bytes in 0 blocks
==816== possibly lost: 0 bytes in 0 blocks
==816== still reachable: 0 bytes in 0 blocks
==816== suppressed: 38,504 bytes in 415 blocks
Особенно последняя строка. Я использую версию Valgrind с тем же номером версии, но почти наверняка значительно старше, и мне пришлось добавить целую кучу подавлений. Кто-то, похоже, сделал это за вас.
Итак, не беспокойтесь об этом - на Mac OS X нормально работать с кучей «в использовании» или «подавленной» памятью.
Когда я запускаю это мягко взломанный вариант кода:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct TokenizerT_ {
int index;
};
typedef struct TokenizerT_ TokenizerT;
TokenizerT *TKCreate(char * ts);
TokenizerT *TKCreate(char * ts) {
TokenizerT *tk = (TokenizerT *)(malloc(sizeof(TokenizerT)));
if(tk == NULL)
return NULL;
tk->index = strlen(ts);
return tk;
}
void TKDestroy(TokenizerT * tk);
void TKDestroy(TokenizerT * tk) {
free(tk);
return;
}
int main(int argc, char ** argv)
{
TokenizerT *tk = TKCreate(argc > 1 ? argv[1] : "CogentConniptions");
printf("%lu\n", sizeof(tk->index));
TKDestroy(tk);
return 0;
}
Хаки были необходимы, чтобы избежать предупреждений компиляции по моим умолчанию параметры компиляции:
$ gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
> -Wold-style-definition -Werror vg.c -o vg
$
Когда я бегу, я получаю :
$ valgrind vg
==31534== Memcheck, a memory error detector
==31534== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==31534== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info
==31534== Command: vg
==31534==
--31534-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
--31534-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 2 times)
--31534-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 4 times)
4
==31534==
==31534== HEAP SUMMARY:
==31534== in use at exit: 38,874 bytes in 418 blocks
==31534== total heap usage: 519 allocs, 101 frees, 45,854 bytes allocated
==31534==
==31534== LEAK SUMMARY:
==31534== definitely lost: 16 bytes in 1 blocks
==31534== indirectly lost: 0 bytes in 0 blocks
==31534== possibly lost: 13,002 bytes in 109 blocks
==31534== still reachable: 25,856 bytes in 308 blocks
==31534== suppressed: 0 bytes in 0 blocks
==31534== Rerun with --leak-check=full to see details of leaked memory
==31534==
==31534== For counts of detected and suppressed errors, rerun with: -v
==31534== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$
И с моей ручной suppressions
файла:
$ valgrind --suppressions=suppressions vg
==31538== Memcheck, a memory error detector
==31538== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==31538== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info
==31538== Command: vg
==31538==
--31538-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
--31538-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 2 times)
--31538-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 4 times)
4
==31538==
==31538== HEAP SUMMARY:
==31538== in use at exit: 38,874 bytes in 418 blocks
==31538== total heap usage: 519 allocs, 101 frees, 45,854 bytes allocated
==31538==
==31538== LEAK SUMMARY:
==31538== definitely lost: 0 bytes in 0 blocks
==31538== indirectly lost: 0 bytes in 0 blocks
==31538== possibly lost: 0 bytes in 0 blocks
==31538== still reachable: 25,856 bytes in 308 blocks
==31538== suppressed: 13,018 bytes in 110 blocks
==31538== Rerun with --leak-check=full to see details of leaked memory
==31538==
==31538== For counts of detected and suppressed errors, rerun with: -v
==31538== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
$
Файл подавления, который у вас есть, делает работу лучше, чем моя.
Если я помню, у Valgrind есть некоторые проблемы с последними версиями OS X. Попробуйте запустить вашу программу на машине Linux или виртуальной машине. – JAL