如何访问结构中包含的数组的地址?

时间:2013-10-06 21:36:42

标签: c struct pthreads

我正在尝试创建一个使用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函数时,它会因“没有分配指针被重新分配”而崩溃。

我应该做些什么?谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

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

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

pthread_arguments->buf = 0;