线程中的动态分配和释放

时间:2018-08-15 15:14:04

标签: c linux dynamic-memory-allocation

我正在线程中分配一些内存。当我调用pthread_detach(pthread_self());时,应在pthread_exit();pthread_cancel()终止线程后释放Linux为该线程分配的内存。

我的问题是,我还应该释放通过malloc分配的内存吗?另外,如果线程中的其他函数分配了一些空间,即使线程终止并且在线程中调用了pthread_detach(pthread_self());,我也应该释放该空间吗?

void *test_thread(void * arg)
{
    pthread_detach(pthread_self());

    int *c = malloc(2048);
    pthread_exit(NULL);
}

3 个答案:

答案 0 :(得分:5)

pthread_detach为您做的唯一一件事就是您不需要调用pthread_join来清理内部线程数据结构。

通过malloc分配的任何内存仍然需要手动释放。要么线程需要在退出之前执行此操作,要么需要使指向malloc的内存的指针可用于另一个线程进行清理。

答案 1 :(得分:2)

您将必须释放在pthread中分配的所有 内存,以避免内存泄漏。由于pthread具有共享的内存空间,因此分配内存然后退出并返回指向它的指针是完全可以接受的,C编译器或系统无法知道内存不再正在使用。

答案 2 :(得分:1)

查看此问题的另一种方法是:管理通过malloc()获得的内存以及类似的功能,例如calloc()非常简单。您必须free()malloc()(或calloc()valloc()或...)收到的确切值。进程中的每个操作是在哪个线程上执行的。

更简洁:

您已分配它,free()。一次。