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 再割り当て関数

が null ポインターの場合ptr、realloc 関数は、指定されたサイズに対して malloc 関数のように動作します。それ以外の場合、ptr がメモリ管理関数によって以前に返されたポインターと一致しない場合、または free または realloc 関数の呼び出しによってスペースが解放された場合、動作は未定義です。

  • sizeof(pthread_t *) * iにアクセスするのに十分なメモリが割り当てられていませんthread[i]。を割り当てる必要があり((sizeof(pthread_t *) * (i + 1))ます。
于 2012-10-25T15:00:28.567 に答える