0

getline を使用して入力ファイルから読み取るプログラムを作成しようとしています。

次の構造体を作成しました

struct misc_struct {
   char *buf;
   FILE *some_input_file;
};

私のメイン ファイルでは、バッファーと複数の pthreads を作成します。

char buf[1024];
FILE *some_input_file;
struct misc_struct *pthread_arguments;
...
pthread_arguments = (struct misc_struct *)malloc(sizeof(struct misc_struct));
pthread_arguments->buf = buf;
pthread_arguments->some_input_file = some_input_file;
pthread_create(&t1, NULL, start, (void *)pthread_arguments);

今私の開始機能で:

void *start(void *args)
{
    size_t len;
    struct misc_struct *pthread_arguments = (struct misc_struct *)pthread_arguments;
    getline(&args->buf,&len,args->some_input_file);
    ...
}

残念ながら、この getline() 呼び出しでクラッシュしています。args->buf へのアクセスに問題はありませんが、getline 関数に &args->buf を使用する必要がある場合、「realloc'd されているポインターが割り当てられていません」でクラッシュします。

どうすればいいですか?ありがとう!

4

1 に答える 1

3
char buf[1024];
:
:
:
pthread_arguments->buf = buf;

getline(&args->buf,&len,args->some_input_file);

getline()与えられたバッファを解放して再割り当てできることを期待していると思います。

必要に応じて割り当てることができるように、null バッファーへgetline()のポインターを指定することをお勧めします。

pthread_arguments->buf = 0;
于 2013-10-06T21:40:10.960 に答える