[英]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
调用,我希望使用以下两种行为之一:
printf
释放缓冲区A printf
调用 我不希望发生的事情是不要释放或重新分配缓冲区A,这给我带来了内存泄漏。
实际行为是两个所需行为之一吗?
C标准规定(7.19.5.6):
只有在流指向的流已与打开的文件相关联之后,并且对该流执行任何其他操作(对setvbuf的调用失败除外)之前,才可以使用setvbuf函数。
因此,像您一样,在同一流上重复调用setvbuf
是未定义的行为。
您没有指定使用的平台,但是glibc的实现似乎并未重新分配内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.