C语言 问一个关于文件指针的问题,就是文件指针fclose之后,指针变量fp自己会有内存吗,要free吗?
其实是这样的,我编的一个函数,里面要递归,又要打开文件,所以递归之前我已经把fpfclose了,但是还是堆栈溢出了,我一步一步定位之后发现,最后执行一个rewind(fp...
其实是这样的,我编的一个函数,里面要递归,又要打开文件,所以递归之前我已经把fp fclose了,但是还是堆栈溢出了,我一步一步定位之后发现,最后执行一个rewind(fp)时,堆栈溢出了,我就怀疑这个fp也是占内存的,函数里的其他变量都动态分配或者是全局变量,不知道是不是fp的问题,请高手帮我看一下,谢谢了!
展开
4个回答
展开全部
只要是new的 都要delete才能释放内存的 文件指针也不例外 fclose只是关闭相应的文件 而不是释放fp的内存
追问
可是我没有给他分配内存,就写了FILE *fp,这样是不是也会占着内存,函数没有结束之前?
追答
是占着内存的 但是你没办法释放 因为不是new的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你对一个已经fclose了的fp进行rewind 操作? 程序应该崩溃了。
即使对一个NULL的fp进行rewind操作程序应该也会崩溃的。
即使对一个NULL的fp进行rewind操作程序应该也会崩溃的。
更多追问追答
追问
我是在fclose之前rewind的
追答
递归层数太多也会把堆栈撑爆的,一个每次递归前,当前层的所有已经动态分配的变量都会进栈的吧,这是堆栈的作用啊,如果你每层都动态申请一个超大数组的话,堆栈很快爆的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这时看看单步看看一以rewind(fp),fp有没有打开成功,我觉得你问题是没有打开成功。
所以建议你在每一个打开文件都检查一下有没打开成功,如果没有看看出的是什么问题。
所以建议你在每一个打开文件都检查一下有没打开成功,如果没有看看出的是什么问题。
更多追问追答
追问
可是它弹出说Stack Overflow!如果堆栈溢出的话是不是fopen也不能执行了?
追答
那你试过Fp打开成功了吗,我这显示如果打开不成功的话是图上所说的错误,你再看看吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询