读书人

输入输出流的有关问题

发布时间: 2012-04-28 11:49:53 作者: rapoo

输入输出流的问题

C/C++ code
#include<stdio.h>#include<stdlib.h>int main(){    int i;    free(stdin);    scanf("%d",&i);    //free(stdout);    printf("%d",i);    system("pause");    return 0;}

看到书上说,输入输出缓存是malloc函数建立的,于是我就试验了上面这个程序,发现运转一切正常,这是为什么?希望大神能够解答下,谢谢

[解决办法]
free的参数是malloc的返回值,io缓存是malloc出来的,不代表stdin/stdou就是这个缓存,所以free(stdin/stdout)是个很严重的错误调用。
另外io缓存是stdin的一部分(某一成员)。

[解决办法]
不敢保证stdin,stdout是怎么分配的,而且即便free了也可以内存非法访问的使用它而不引起core。

比如,stdin,stdout是在某个stdio.c里这样定义的全局变量:

FILE fstdin;
FILE *stdin = &fstdin;

那你free它本身就是一种错误。

读书人网 >C语言

热点推荐