2014-12-31 29 views
-1

我有一個接口,只能打印字符串到一個文件,我在嵌入式系統上工作,所以打開一個文件不是一個選項
我在內存中創建了一個虛擬文件,使用open_memstream ,並使用該文件,並解析程序失敗串上fclose造成分段錯誤
這裏的代碼之後:
在一個memstream上調用fclose FILE導致分段fualt

/* 
* Creating a temp file in memory 
*/ 
FILE * mem_stream; 
char * mem_buf; 
size_t mem_len; 
mem_stream = open_memstream(mem_buf,&mem_len); 

XMLDoc_print(doc, mem_stream, NULL, NULL, 0, 0 ,0); 
XMLDoc_free(doc); 

/* 
* Reading the temp file 
*/ 

fseek(mem_stream,0,SEEK_END); 
long file_size = ftell(mem_stream); 
rewind(mem_stream); 
char * contents = malloc((file_size+1) * sizeof(char)); 
fread(contents, sizeof(char), file_size, mem_stream); 
/* 
* closing the file 
*/ 
fclose(mem_stream); 
contents[file_size] = 0; 


printf("\n THE RESULT XML IS : %s \n" , contents); 

如果我評論的fclose(mem_stream);行程序工作正常,這是一種選擇?如果不是我該如何解決這個問題。

+4

不應該'open_memstream()'函數的第一個參數是'char **'。 –

+1

@SouravGhosh是的,我想知道OP – Gopi

+1

是怎麼回事,我檢查了'open_memstream()'的char ** bufp參數,'char *'或'char **'都可以正常工作。它只是需要一個字符指針,我反正不使用它 –

回答

1

mem_stream = open_memstream(mem_buf,&mem_len);此行應該是這樣的:
mem_stream = open_memstream(&mem_buf,&mem_len); 函數的文檔中沒有說

/*打開寫入被擴展爲必要 一個malloc分配緩衝器的流。 * BUFLOC和* SIZELOC用緩衝區的位置 和在fflush或fclose上寫入的字符數進行更新。 */

extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur; 

char ** __bufloc是一個地址到一個char *緩衝液中。