Не получается правильно проверить утечку памяти при помощи valgrind
Я недавно перешёл с С на С++. После того как написал первую программу решил проверить утечку памяти при помощи valgrind и получил ошибку которая указывает на непонятные файлы. На С все работает нормально, я запускаю программу, могу выполнить все действия такие как удаление и добавление в дин. массив, а на С++ вылетает ошибка которая не позволяет даже вывести выбор операций на экран. Подскажите как это можно исправить.
Мой мейк файл
#MAC_OPTS=-isystem /opt/homebrew/include -I/opt/homebrew/include -L/opt/homebrew/lib
#ARCH = -arch arm64
CC = $(CLANG_PREFIX)clang++
LAB_OPTS = -I./src src/Arr_Student.cpp src/Student.cpp
TEST_OPTS = -I./test test/test_Arr_Student.cpp test/test_Student.cpp
DOCG = doxygen
DOC = Doxyfile
C_OPTS = $(MAC_OPTS) -fsanitize=address -std=c++14 -gdwarf-4 -Wall -Wextra -Werror -Wformat-security -Wfloat-equal -Wshadow -Wconversion -Wlogical-not-parentheses -Wnull-dereference -Wno-unused-variable -Werror=vla $(LAB_OPTS)
V_FLAGS = --tool=memcheck --leak-check=full --show-reachable=yes \
--undef-value-errors=yes --track-origins=no --child-silent-after-fork=no \
--trace-children=no --error-exitcode=1
V_LAGS = valgrind
#-------------------------------------------------------------#
#(basic)#
main_all: clean prep compile
./dist/main.bin ./assets/input.txt dist/text.txt
test_all: clean prep test.bin test
doxygen: clean_doxy Doxygen
#-------------------------------------------------------------#
#(lead-up)#
clean:
rm -rf dist
clean_doxy:
rm -rf ./dist/html
rm -rf ./dist/latex
prep:
mkdir dist
#-------------------------------------------------------------#
#(main)#
compile: main.bin
main.bin: src/main.cpp
$(CC) $(C_OPTS) $< -o ./dist/$@
check:
clang-format --verbose -dry-run --Werror src/*
clang-tidy src/*.c -checks=-readability-uppercase-literal-suffix,-readability-magic-numbers,-clang-analyzer-deadcode.DeadStores,-clang-analyzer-security.insecureAPI.rand
rm -rf src/*.dump
#-------------------------------------------------------------#
#(doxygen)#
Doxygen:
$(DOCG) $(DOC)
#-------------------------------------------------------------#
#(test)#
test_all: clean prep test.bin test
test.bin:
$(CC) $(C_OPTS) $(TEST_OPTS) $< $(ARCH) -fprofile-instr-generate -fcoverage-mapping -o ./dist/$@ -lgtest -lgtest_main
test: dist
LLVM_PROFILE_FILE="dist/test.profraw" ./dist/test.bin
llvm-profdata merge -sparse dist/test.profraw -o dist/test.profdata
llvm-cov report dist/test.bin -instr-profile=dist/test.profdata src/*.cpp
llvm-cov show dist/test.bin -instr-profile=dist/test.profdata src/*.cpp --format html > dist/coverage.html
#-------------------------------------------------------------#
#(code-coverage)#
leak-check_main1:clean prep main.bin
$(V_LAGS) $(V_FLAGS) --log-file=dist/valgrind_main.log ./dist/main.bin
#-------------------------------------------------------------#
Файл которые получается на выходе
==5399== Memcheck, a memory error detector
==5399== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==5399== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==5399== Command: ./dist/main.bin
==5399== Parent PID: 5379
==5399==
==5399==
==5399== Process terminating with default action of signal 11 (SIGSEGV)
==5399== General Protection Fault
==5399== at 0x4C0C902: __pthread_once_slow (pthread_once.c:114)
==5399== by 0x4CC661A: __rpc_thread_variables (rpc_thread.c:59)
==5399== by 0x4D16FF8: free_mem (in /usr/lib/x86_64-linux-gnu/libc.so.6)
==5399== by 0x4D16B89: __libc_freeres (in /usr/lib/x86_64-linux-gnu/libc.so.6)
==5399== by 0x483A13E: _vgnU_freeres (vg_preloaded.c:74)
==5399== by 0x2D2987: ???
==5399== by 0x1D0573: __sanitizer::Die() (in /home/vlad/Documents/1cours/lab17/dist/main.bin)
==5399== by 0x1B8261: __asan::InitializeShadowMemory() (in /home/vlad/Documents/1cours/lab17/dist/main.bin)
==5399== by 0x1B77E0: __asan::AsanInitInternal() (in /home/vlad/Documents/1cours/lab17/dist/main.bin)
==5399== by 0x4005E25: _dl_init (dl-init.c:102)
==5399== by 0x401C989: ??? (in /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2)
==5399==
==5399== HEAP SUMMARY:
==5399== in use at exit: 0 bytes in 0 blocks
==5399== total heap usage: 30 allocs, 30 frees, 1,123 bytes allocated
==5399==
==5399== All heap blocks were freed -- no leaks are possible
==5399==
==5399== For lists of detected and suppressed errors, rerun with: -s
==5399== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Внимание!!! Хоть здесь и написано что утечек нет, но повторю что в программе заложен алгоритм с меню выбора операции(1.добавить в дин. массив элемент 2. удалить элемент), выбор этих операций не предоставляется.
Ошибка которая выведенная в консоли
==4656==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==4656==ASan shadow was supposed to be located in the [0x00007fff7000-0x10007fff7fff] range.
==4656==This might be related to ELF_ET_DYN_BASE change in Linux 4.12.
==4656==See https://github.com/google/sanitizers/issues/856 for possible workarounds.
==4656==Process memory map follows:
0x000000108000-0x00000012b000 /home/vlad/Documents/1cours/lab17/dist/main.bin
0x00000012b000-0x0000001f6000 /home/vlad/Documents/1cours/lab17/dist/main.bin
0x0000001f6000-0x00000022b000 /home/vlad/Documents/1cours/lab17/dist/main.bin
0x00000022b000-0x00000022c000 /home/vlad/Documents/1cours/lab17/dist/main.bin
0x00000022c000-0x000000230000 /home/vlad/Documents/1cours/lab17/dist/main.bin
0x000000230000-0x000000c04000
0x000004000000-0x000004002000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x000004002000-0x000004028000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x000004028000-0x000004033000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x000004033000-0x000004035000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x000004035000-0x000004037000 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
0x000004037000-0x000004038000
0x000004837000-0x000004839000
0x000004839000-0x00000483a000 /usr/libexec/valgrind/vgpreload_core-amd64-linux.so
0x00000483a000-0x00000483b000 /usr/libexec/valgrind/vgpreload_core-amd64-linux.so
0x00000483b000-0x00000483c000 /usr/libexec/valgrind/vgpreload_core-amd64-linux.so
0x00000483c000-0x00000483d000 /usr/libexec/valgrind/vgpreload_core-amd64-linux.so
0x00000483d000-0x00000483e000 /usr/libexec/valgrind/vgpreload_core-amd64-linux.so
0x00000483e000-0x000004843000 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
0x000004843000-0x00000484f000 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
0x00000484f000-0x000004852000 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
0x000004852000-0x000004853000 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
0x000004853000-0x000004854000 /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so
0x000004854000-0x000004860000
0x000004867000-0x000004900000 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
0x000004900000-0x000004a01000 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
0x000004a01000-0x000004a70000 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
0x000004a70000-0x000004a7b000 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
0x000004a7b000-0x000004a7e000 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
0x000004a7e000-0x000004a81000
0x000004a81000-0x000004a8f000 /usr/lib/x86_64-linux-gnu/libm.so.6
0x000004a8f000-0x000004b01000 /usr/lib/x86_64-linux-gnu/libm.so.6
0x000004b01000-0x000004b5e000 /usr/lib/x86_64-linux-gnu/libm.so.6
0x000004b5e000-0x000004b5f000 /usr/lib/x86_64-linux-gnu/libm.so.6
0x000004b5f000-0x000004b60000 /usr/lib/x86_64-linux-gnu/libm.so.6
0x000004b60000-0x000004b63000 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
0x000004b63000-0x000004b7a000 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
0x000004b7a000-0x000004b7e000 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
0x000004b7e000-0x000004b7f000 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
0x000004b7f000-0x000004b80000 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
0x000004b80000-0x000004ba8000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x000004ba8000-0x000004d18000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x000004d18000-0x000004d70000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x000004d70000-0x000004d74000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x000004d74000-0x000004d76000 /usr/lib/x86_64-linux-gnu/libc.so.6
0x000004d76000-0x000005116000
0x000005116000-0x000005516000
0x000005516000-0x000005526000
0x000058000000-0x000058001000 /usr/libexec/valgrind/memcheck-amd64-linux
0x000058001000-0x0000581d4000 /usr/libexec/valgrind/memcheck-amd64-linux
0x0000581d4000-0x000058279000 /usr/libexec/valgrind/memcheck-amd64-linux
0x000058279000-0x00005827f000 /usr/libexec/valgrind/memcheck-amd64-linux
0x00005827f000-0x000059c8b000
0x001002001000-0x001002cb8000
0x001002cb8000-0x001002cba000
0x001002cba000-0x001002dba000
0x001002dba000-0x001002dbc000
0x001002dbc000-0x001002dbd000 /tmp/vgdb-pipe-shared-mem-vgdb-4656-by-vlad-on-???
0x001002dbd000-0x001002f53000
0x001002fb9000-0x001003693000
0x0010036a2000-0x001003a26000
0x001003a97000-0x001005b67000
0x0010062cb000-0x0010065cb000
0x0010066c0000-0x00100693b000
0x001ffeffe000-0x001fff001000
0x7ffd51667000-0x7ffd51688000 [stack]
0x7ffd51751000-0x7ffd51755000 [vvar]
==4656==End of process memory map.
make: *** [Makefile:75: leak-check_main1] Error 1