我正在尝试动态分配一个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;
}
我在这里做错了什么?
答案 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))
。