2013-10-06 52 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