1

我试图动态分配一个 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;
}

我在这里做错了什么?

4

1 回答 1

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

C11 (n1570),第 7.22.3.5 节 realloc 函数

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

  • sizeof(pthread_t *) * i没有分配足够的内存来访问thread[i]. 你必须分配((sizeof(pthread_t *) * (i + 1)).
于 2012-10-25T15:00:28.567 回答