Tengo un programa simple que crea un hilo y espera cuando termina este hilo, y luego el programa también finaliza. Cuando compilo este programa con el compilador C (gcc) y lo compruebo con valgrind, no ocurre ningún problema, pero cuando lo compilo con el compilador C++ (g ++) y lo compruebo con valgrind, muestra que mi programa tiene pérdidas de memoria. ¿Cual podría ser el problema?Problema de pérdida de memoria
Aquí es mi programa,
#include <pthread.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
unsigned char b = 0;
void* threadfunc1(void *pVoid)
{
while(b == 0)
{
usleep(10000);
}
pthread_exit(0);
}
int main(void)
{
int status;
pthread_attr_t tattr;
pthread_t thread1;
status = pthread_attr_init(&tattr);
status = pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_JOINABLE);
status = pthread_attr_setscope(&tattr,PTHREAD_SCOPE_SYSTEM);
if(pthread_create(&thread1, &tattr, threadfunc1, NULL) != 0)
{
exit(1);
}
usleep(1000000);
b = 1;
pthread_join(thread1, NULL);
usleep(2000000);
return 0;
}
este es el resultado, cuando compilo usando g ++, y el registro valgrind
==7658== HEAP SUMMARY:
==7658== in use at exit: 28 bytes in 1 blocks
==7658== total heap usage: 2 allocs, 1 frees, 172 bytes allocated
==7658==
==7658== 28 bytes in 1 blocks are still reachable in loss record 1 of 1
==7658== at 0x4024C1C: malloc (vg_replace_malloc.c:195)
==7658== by 0x400C01E: _dl_map_object_deps (dl-deps.c:506)
==7658== by 0x40117E0: dl_open_worker (dl-open.c:297)
==7658== by 0x400D485: _dl_catch_error (dl-error.c:178)
==7658== by 0x401119F: _dl_open (dl-open.c:586)
==7658== by 0x428D0C1: do_dlopen (dl-libc.c:86)
==7658== by 0x400D485: _dl_catch_error (dl-error.c:178)
==7658== by 0x428D1C0: dlerror_run (dl-libc.c:47)
==7658== by 0x428D2DA: __libc_dlopen_mode (dl-libc.c:160)
==7658== by 0x4048876: pthread_cancel_init (unwind-forcedunwind.c:53)
==7658== by 0x40489EC: _Unwind_ForcedUnwind (unwind-forcedunwind.c:126)
==7658== by 0x40464B7: __pthread_unwind (unwind.c:130)
==7658==
==7658== LEAK SUMMARY:
==7658== definitely lost: 0 bytes in 0 blocks
==7658== indirectly lost: 0 bytes in 0 blocks
==7658== possibly lost: 0 bytes in 0 blocks
==7658== still reachable: 28 bytes in 1 blocks
==7658== suppressed: 0 bytes in 0 blocks
lo tanto, lo que estoy haciendo mal, es que mi error o ..., ¿por qué cuando lo compilo con gcc no se producen problemas y cuando lo compilo usando C++, hay pérdidas de memoria?
Escritura de archivos de código fuente en varios idiomas es difícil. Espere muchos más problemas. Sugiero que te limites a solo uno de C o C++. – pmg
Obtengo este programa de mi amigo, lo compila a través de makefile, pero creé un nuevo proyecto en NetBeans para este programa, ya que mi compilador predeterminado es gcc, no tuve problemas al compilarlo y ejecutarlo, pero cuando lo compilo a través de makefile , Tengo estas filtraciones, así que fue interesante saber por qué? – akmal