0

我正在尝试创建一个使用 getline 从输入文件中读取的程序。

我创建了以下结构

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

在我的主文件中,我创建了一个缓冲区和多个 pthread。

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 时没有问题,但是当我需要将 &args->buf 用于 getline 函数时,它会因“未分配重新分配的指针”而崩溃

我应该做些什么不同的事情?谢谢!

4

1 回答 1

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

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

我怀疑getline()期望能够释放并重新分配给定的缓冲区。

最好给getline()一个指向空缓冲区的指针,以便它可以根据需要分配它。

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