当前位置:  开发笔记 > 编程语言 > 正文

这个简单的C#代码会导致堆栈溢出吗?

如何解决《这个简单的C#代码会导致堆栈溢出吗?》经验,为你挑选了1个好方法。

我有一个类库,主要将字符串记录到文本文件.它的一个方法是LogString(字符串str)所以我只是想知道基于下面的函数,如果我多次调用它超过600次,是否会导致stackoverflow?

    public void LogString(string str)
    {  
        try
        {
            if (filePathFilenameExists())
            {
                using (StreamWriter strmWriter = new StreamWriter(filePathFilename, true))
                {
                    strmWriter.WriteLine(str);
                    strmWriter.Flush();
                    strmWriter.Close();
                }
            }
            else
            {
                MessageBox.Show("Unable to write to file");
            }
        }
        catch (Exception err)
        {
            string errMsg = err.Message;
        }

    }

Kyle Cronin.. 9

这似乎不是一个递归函数.我不知道这会如何导致堆栈溢出.

为了溢出堆栈,您必须不断地从函数内调用函数.每次执行此操作时,更多堆栈空间用于在被调用函数返回时恢复调用函数.递归函数遇到了这个问题,因为它们需要存储同一函数状态的多个副本,每个递归级别一个.这也可能发生在相互递归的函数中(A调用B,B调用A)并且它可能更难检测,但我认为这不是这种情况.



1> Kyle Cronin..:

这似乎不是一个递归函数.我不知道这会如何导致堆栈溢出.

为了溢出堆栈,您必须不断地从函数内调用函数.每次执行此操作时,更多堆栈空间用于在被调用函数返回时恢复调用函数.递归函数遇到了这个问题,因为它们需要存储同一函数状态的多个副本,每个递归级别一个.这也可能发生在相互递归的函数中(A调用B,B调用A)并且它可能更难检测,但我认为这不是这种情况.


显然,filePathFilenameExists是递归实现的:D
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有