From dd80c803a6c98a371cd3fb93acf77b0438d63f64 Mon Sep 17 00:00:00 2001 From: Radoslaw Marcinowski Date: Thu, 3 Jul 2025 23:17:01 +0200 Subject: [PATCH 1/4] Run valgrind --- homework/resourceD/valgrind-output.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/homework/resourceD/valgrind-output.txt b/homework/resourceD/valgrind-output.txt index e69de29b..40372f7c 100644 --- a/homework/resourceD/valgrind-output.txt +++ b/homework/resourceD/valgrind-output.txt @@ -0,0 +1,24 @@ +==11628== Memcheck, a memory error detector +==11628== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. +==11628== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info +==11628== Command: ./resourceD d +==11628== +Using resource. Passed d +Passed d. d is prohibited. +==11628== +==11628== HEAP SUMMARY: +==11628== in use at exit: 1 bytes in 1 blocks +==11628== total heap usage: 5 allocs, 4 frees, 76,996 bytes allocated +==11628== +==11628== 1 bytes in 1 blocks are definitely lost in loss record 1 of 1 +==11628== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==11628== by 0x109375: main (resourceD.cpp:30) +==11628== +==11628== LEAK SUMMARY: +==11628== definitely lost: 1 bytes in 1 blocks +==11628== indirectly lost: 0 bytes in 0 blocks +==11628== possibly lost: 0 bytes in 0 blocks +==11628== still reachable: 0 bytes in 0 blocks +==11628== suppressed: 0 bytes in 0 blocks +==11628== +==11628== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) From d2ce8da7973878f9a525cd140f708f911eb3fa10 Mon Sep 17 00:00:00 2001 From: Radoslaw Marcinowski Date: Thu, 3 Jul 2025 23:20:17 +0200 Subject: [PATCH 2/4] Fix memory leak --- homework/resourceD/resourceD.cpp | 3 ++- homework/resourceD/valgrind-output.txt | 35 ++++++++++---------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/homework/resourceD/resourceD.cpp b/homework/resourceD/resourceD.cpp index 6de14868..95cbe456 100644 --- a/homework/resourceD/resourceD.cpp +++ b/homework/resourceD/resourceD.cpp @@ -29,12 +29,13 @@ int main(int argc, char* argv[]) { rsc = new Resource(); rsc->use(N); - delete rsc; + // delete rsc; // Not reached statement when exception throw } catch (logic_error & e) { cout << e.what() << endl; } + delete rsc; return 0; } diff --git a/homework/resourceD/valgrind-output.txt b/homework/resourceD/valgrind-output.txt index 40372f7c..9e290231 100644 --- a/homework/resourceD/valgrind-output.txt +++ b/homework/resourceD/valgrind-output.txt @@ -1,24 +1,15 @@ -==11628== Memcheck, a memory error detector -==11628== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. -==11628== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info -==11628== Command: ./resourceD d -==11628== +==11870== Memcheck, a memory error detector +==11870== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. +==11870== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info +==11870== Command: ./resourceD d +==11870== Using resource. Passed d Passed d. d is prohibited. -==11628== -==11628== HEAP SUMMARY: -==11628== in use at exit: 1 bytes in 1 blocks -==11628== total heap usage: 5 allocs, 4 frees, 76,996 bytes allocated -==11628== -==11628== 1 bytes in 1 blocks are definitely lost in loss record 1 of 1 -==11628== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) -==11628== by 0x109375: main (resourceD.cpp:30) -==11628== -==11628== LEAK SUMMARY: -==11628== definitely lost: 1 bytes in 1 blocks -==11628== indirectly lost: 0 bytes in 0 blocks -==11628== possibly lost: 0 bytes in 0 blocks -==11628== still reachable: 0 bytes in 0 blocks -==11628== suppressed: 0 bytes in 0 blocks -==11628== -==11628== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0) +==11870== +==11870== HEAP SUMMARY: +==11870== in use at exit: 0 bytes in 0 blocks +==11870== total heap usage: 5 allocs, 5 frees, 76,996 bytes allocated +==11870== +==11870== All heap blocks were freed -- no leaks are possible +==11870== +==11870== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) From 7e252314e53a3dc6a2dc999ad4293c89fe32af1c Mon Sep 17 00:00:00 2001 From: Radoslaw Marcinowski Date: Thu, 3 Jul 2025 23:27:38 +0200 Subject: [PATCH 3/4] Added std::unique_ptr --- homework/resourceD/resourceD.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/homework/resourceD/resourceD.cpp b/homework/resourceD/resourceD.cpp index 95cbe456..2a67cfcf 100644 --- a/homework/resourceD/resourceD.cpp +++ b/homework/resourceD/resourceD.cpp @@ -1,5 +1,6 @@ #include #include +#include using namespace std; @@ -24,10 +25,11 @@ int main(int argc, char* argv[]) exit(-1); } const char* N = argv[1]; - Resource* rsc = nullptr; + // Resource* rsc = nullptr; + std::unique_ptr rsc{new Resource()}; try { - rsc = new Resource(); + // rsc = new Resource(); rsc->use(N); // delete rsc; // Not reached statement when exception throw } @@ -35,7 +37,7 @@ int main(int argc, char* argv[]) { cout << e.what() << endl; } - delete rsc; + // delete rsc; return 0; } From 8fc2187f06d9cf9dbaf522759ab7424a04589b97 Mon Sep 17 00:00:00 2001 From: Radoslaw Marcinowski Date: Thu, 3 Jul 2025 23:29:09 +0200 Subject: [PATCH 4/4] Used std::make_unique --- homework/resourceD/resourceD.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homework/resourceD/resourceD.cpp b/homework/resourceD/resourceD.cpp index 2a67cfcf..3beb48b5 100644 --- a/homework/resourceD/resourceD.cpp +++ b/homework/resourceD/resourceD.cpp @@ -26,7 +26,8 @@ int main(int argc, char* argv[]) } const char* N = argv[1]; // Resource* rsc = nullptr; - std::unique_ptr rsc{new Resource()}; + // std::unique_ptr rsc{new Resource()}; + auto rsc = std::make_unique(); try { // rsc = new Resource();