我正在尝试创建一个使用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函数时,它会因“没有分配指针被重新分配”而崩溃。
我应该做些什么?谢谢!
答案 0 :(得分:3)
char buf[1024];
:
:
:
pthread_arguments->buf = buf;
getline(&args->buf,&len,args->some_input_file);
我怀疑getline()
希望能够释放并重新分配给定的缓冲区。
最好给getline()
一个指向空缓冲区的指针,以便它可以根据需要进行分配。
pthread_arguments->buf = 0;