在内存流上调用fclose FILE会导致分段错误

时间:2014-12-31 08:05:29

标签: c fclose

我有一个只能将字符串打印到文件的界面,我在嵌入式系统上工作,因此打开文件不是一个选项
我使用open_memstream在内存中创建了一个虚拟文件,在使用该文件并解析字符串后,程序在fclose上失败导致分段错误
这是代码:

/*
 * 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);行该程序运行正常,这是一个选项吗?如果不是我怎么能解决这个问题。

1 个答案:

答案 0 :(得分: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 *缓冲区的地址。