`
hyshucom
  • 浏览: 809491 次
文章分类
社区版块
存档分类
最新评论

自动变量的潜在问题

 
阅读更多

下面是一个错误的实例

...
...

#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分配空间。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics