এই ব্লকটিতে উল্লিখিত সমস্ত ফাংশনগুলি লাইব্রেরির ফাংশন। আমি কীভাবে এই স্মৃতি ফুটোটি সংশোধন করতে পারি?
এটি " এখনও পৌঁছনীয় " বিভাগের অধীনে তালিকাভুক্ত করা হয়েছে । (আরও 4 টি রয়েছে যা খুব মিল, তবে বিভিন্ন আকারের)
630 bytes in 1 blocks are still reachable in loss record 5 of 5
at 0x4004F1B: calloc (vg_replace_malloc.c:418)
by 0x931CD2: _dl_new_object (dl-object.c:52)
by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972)
by 0x92EFB6: _dl_map_object (dl-load.c:2251)
by 0x939F1B: dl_open_worker (dl-open.c:255)
by 0x935965: _dl_catch_error (dl-error.c:178)
by 0x9399C5: _dl_open (dl-open.c:584)
by 0xA64E31: do_dlopen (dl-libc.c:86)
by 0x935965: _dl_catch_error (dl-error.c:178)
by 0xA64FF4: __libc_dlopen_mode (dl-libc.c:47)
by 0xAE6086: pthread_cancel_init (unwind-forcedunwind.c:53)
by 0xAE61FC: _Unwind_ForcedUnwind (unwind-forcedunwind.c:126)
ক্যাচ: একবার আমি আমার প্রোগ্রামটি চালানোর পরে, এটি কোনও মেমরি ফাঁস দেয়নি, তবে এতে ভালগ্রাইন্ড আউটপুটে একটি অতিরিক্ত লাইন ছিল, যা আগে উপস্থিত ছিল না:
মুনম্যাপের কারণে /lib/libgcc_s-4.4.4-20100630.so.1 এ 0x5296fa0-0x52af438 এ সিমগুলি ছাড়ছে ()
যদি এই ফাঁসটি সংশোধন করা যায় না, তাহলে কি কমপক্ষে কেউ ব্যাখ্যা করতে পারেন যে মুনম্যাপ () লাইনটি ভালগ্রিন্ডকে 0 "এখনও পৌঁছনীয়" লিকের কারণ বলে?
সম্পাদনা:
এখানে একটি সর্বনিম্ন পরীক্ষার নমুনা রয়েছে:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *runner(void *param) {
/* some operations ... */
pthread_exit(NULL);
}
int n;
int main(void) {
int i;
pthread_t *threadIdArray;
n=10; /* for example */
threadIdArray = malloc((n+n-1)*sizeof(pthread_t));
for(i=0;i<(n+n-1);i++) {
if( pthread_create(&threadIdArray[i],NULL,runner,NULL) != 0 ) {
printf("Couldn't create thread %d\n",i);
exit(1);
}
}
for(i=0;i<(n+n-1);i++) {
pthread_join(threadIdArray[i],NULL);
}
free(threadIdArray);
return(0);
}
সাথে চালান:
valgrind -v --leak-check=full --show-reachable=yes ./a.out