我遇到了一个奇怪的问题,希望有人能够解决......我有以下代码:
#include <unistd.h>
#include <mcheck.h>
#include <pthread.h>
static void *run(void *args)
{
sleep(1);
return NULL;
}
int main()
{
mtrace();
pthread_t thread;
pthread_create(&thread, NULL, run, NULL);
pthread_join(thread, NULL);
return 0;
}
我已经以这两种方式编译了它:
g++ -static program.cpp -lpthread
并且
g++ program.cpp -ltpthread
当我查看mtrace的输出(在我的情况下是mem.out)时,如果我使用
-static
选项,mtrace
会报告以下内容:Memory Not freed:
__________________
Address Size Caller
0x085ac350 0x88 program.cpp:0
但是当我排除
-static
选项时,mtrace
报告如下:No memory leaks.
那么这里发生了什么事情,您有什么想法吗?
extern "C" void* run(void* args)
,并且仍然需要返回 NULL 以避免与未定义行为交互。 - Martin York