0

代码如下:

    pthread_t *threads;
    pthread_attr_t pta;

    threads = (pthread_t *) malloc(sizeof(pthread_t) * NumThreads);
    pthread_attr_init(&pta);
    for(i=0; i<NumThreads; i++) {
        pthread_create(&threads[i], &pta, (void*(*)(void*))Addup, (void*)(i+1));
    } 

    for(i=0; i<NumThreads; i++) {
        ret_count = pthread_join(threads[i], NULL); 
    }

    pthread_attr_destroy(&pta);

    free(threads); // Is this needed?

那么,有必要free(threads)吗?是否pthread_attr_destroy(&pta)释放内存资源?

4

2 回答 2

2

它很简单:对 malloc() 的每次调用都需要对 free() 进行一次调用才能不泄漏内存。

free(threads); // Is this needed?

所以是的,绝对需要!

这与 PThread-API 完全无关。

于 2015-02-08T12:57:39.383 回答
1

经过一番搜索,我认为这是需要的。

pthread_attr_destroy确实破坏pthread_attr_t了由pthread_attr_init. 就这样。

如果pthread_attr_destroy真的free有记忆,这个例子怎么样?

pthread_t thrd;
pthread_attr_t pta;

pthread_attr_init(&pta);
thrd = pthread_create(...);
...
pthread_attr_destroy(&pta); // What memory should he free?
于 2015-02-03T12:06:47.953 回答