2013-10-06 36 views
0

我想创建一个使用getline从输入文件读取的程序。如何访问包含在结构中的数组的地址?

我已经创建了下面的结构

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

在我的主文件我创建了一个缓冲和多重并行线程。

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函数时,它会因为“未分配指针”而崩溃“

我该怎么做不同?谢谢!

回答

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

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

我怀疑getline()希望能够释放和realloc它被赋予的缓冲区。

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

pthread_arguments->buf = 0; 
+0

感谢您的回复。这是有道理的,但我也有第二个pthread,我需要允许访问相同的缓冲区,所以我认为预先分配缓冲区是必要的? – Stephen

+1

你想让线程共享缓冲区吗?这让我感到不寻常。但是,如果是这种情况,那么确保所有对getline()的调用都获得相同的char **参数。 –

+0

非常感谢您的帮助! – Stephen