я взял фрагмент кода из libuv книги https://nikhilm.github.io/uvbook/basics.html и проверили его на наличие утечек памяти со следующим простым кодом:У libuv есть утечки памяти в самом простом примере?
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <stdio.h>
#include <uv.h>
int TestMemLeakage_uv_loop()
{
uv_loop_t *loop = (uv_loop_t*)malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
void main(void)
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
TestMemLeakage_uv_loop();
}
Output в отладочном панели:
Detected memory leaks!
Dumping objects ->
{96} normal block at 0x0095B718, 32 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
Не большой утечки, но это! Пожалуйста, проверьте его. Должен ли я создавать отчет об ошибке?
Обновление. Эта утечка не зависит от количества петель. (Я не тщательно тестировал и не углублялся). Следующий код вызывает ту же утечку памяти:
void main(void)
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
for(int i=0; i<100; ++i)
TestMemLeakage_uv_loop();
}
UPD2. Вот сравнение 2 кучей snapshoots до TestMemLeakage_uv_loop()
и после. http://image.prntscr.com/image/a42cf8945eaa4cb58a94eaea1e7c099e.png 180 ассигнований было произведено и не освобождено, 1 из них составлено printf
.
Я не понимаю, если это нормальная ситуация.
У меня не хватило времени для глубокого прослеживания, но поскольку эти 32 байта утечки не растут с течением времени и не растут по количеству подключений, петель, ручек и т. Д. Я резюмирую ** не серьезно и пусть это будет. ** :) – kyb