繁体   English   中英

setvbuf的内存副作用

[英]Memory side effects of setvbuf

我想知道使用setvbuf函数会有什么样的副作用。

一个用例示例:

setvbuf(stdout, NULL, _IOFBF, BUFSIZ); // Call #1
// Many calls to fprintf(stdout, ...);

setvbuf(stdout, NULL, _IONBF, BUFSIZ); // Call #2
// Many calls to fprintf(stdout, ...);

setvbuf(stdout, NULL, _IOFBF, BUFSIZ); // Call #3
// More calls to fprintf(stdout, ...);

假设在调用#1之后为缓冲区A分配了对printf调用,我希望使用以下两种行为之一:

  1. 调用#2之后,通过调用printf释放缓冲区A
  2. 调用#3之后,将缓冲区A重新分配给printf调用

我不希望发生的事情是不要释放或重新分配缓冲区A,这给我带来了内存泄漏。

实际行为是两个所需行为之一吗?

C标准规定(7.19.5.6):

只有在流指向的流已与打开的文件相关联之后,并且对该流执行任何其他操作(对setvbuf的调用失败除外)之前,才可以使用setvbuf函数。

因此,像您一样,在同一流上重复调用setvbuf是未定义的行为。

您没有指定使用的平台,但是glibc的实现似乎并未重新分配内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM