下面是一个错误的实例
...
...
#define DATAFILE "datafile"
FILE *
open_data(void)
{
FILE *fp;
char databuf[BUFSIZE];
if((fp = fopen(DATAFILE, "r")) == NULL)
return NULL;
...
...
return ...
}
问题是:当open_data返回时,它在栈上所使用的空间将由下一个被调用函数的栈帧使用。但是,标准I/O库函数仍将使用其缓冲区的存储空间。这就产生了冲突和混乱。为了校正这个问题,应在全局存储空间静态的(static or extern)或者动态的(alloc)为数组databuf分配空间。