pthread指针数组

时间:2012-10-25 14:59:40

标签: c arrays pthreads malloc realloc

我正在尝试动态分配一个pthread指针数组,但是得到了这个glibc错误:

*** glibc detected *** ./test: realloc(): invalid next size: 0x00000000084d2010 ***

代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int main(int argc, char** argv) {
    pthread_t **threads;
    int i;

    for(i=1;i<100;i++) {
        threads = realloc(threads, sizeof(pthread_t*)*i);
        threads[i] = malloc(sizeof(pthread_t));
    }

   return EXIT_SUCCESS;
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

  • 您应该初始化threads(重点是我的)。
  

C11(n1570),§7.22.3.5realloc函数

     

如果ptr是空指针,则realloc函数的行为类似于malloc函数   指定大小。 否则,如果ptr先前与指针不匹配   由内存管理函数返回,或者如果空间已经存在   通过调用free或realloc函数解除分配,行为是   未定义。

  • sizeof(pthread_t *) * i没有分配足够的内存来访问thread[i]。您必须分配((sizeof(pthread_t *) * (i + 1))