yew app - rustwasm 错误未捕获范围错误:超出最大调用堆栈大小

如何解决yew app - rustwasm 错误未捕获范围错误:超出最大调用堆栈大小

我试图解决数独作为 Yew 应用程序。使用 yew="0.17.4" 版本。 但低于错误

Uncaught RangeError: Maximum call stack size exceeded
    at dlmalloc::dlmalloc::Dlmalloc::malloc::hb6b25cc27fa2f08c (wasm_bg.wasm:wasm-function[55]:0x5f0d)
    at __rdl_alloc (wasm_bg.wasm:wasm-function[327]:0x23108)
    at __rust_alloc (wasm_bg.wasm:wasm-function[362]:0x23480)
    at alloc::raw_vec::RawVec<T,A>::reserve::h02d54539a997f0ac (wasm_bg.wasm:wasm-function[211]:0x207e4)
    at <&mut W as core::fmt::Write>::write_str::he2cb1047a173d57a (wasm_bg.wasm:wasm-function[288]:0x22a02)
    at core::fmt::Formatter::pad_integral::hfd6532b3a41ee584 (wasm_bg.wasm:wasm-function[104]:0x16c73)
    at core::fmt::num::imp::fmt_u64::h5081cd6222065ff2 (wasm_bg.wasm:wasm-function[156]:0x1cecb)
    at core::fmt::num::imp::<impl core::fmt::display for u32>::fmt::hd7239ff7b4d279a9 (wasm_bg.wasm:wasm-function[388]:0x23617)
    at <&T as core::fmt::display>::fmt::h8b339f7b56577d63 (wasm_bg.wasm:wasm-function[392]:0x2364d)
    at core::fmt::write::h8b996d8af01475c9 (wasm_bg.wasm:wasm-function[103]:0x16b15)

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=16e0219070bd7245a50a209de0ce2cd4

解决方法

让我们回顾一下您的 solve 函数:

fn solve(&mut self)-> bool{
    match self.getemptycell(){
        Some((row,col)) => {
            for value in 1..10{
                if self.IsValidValue(row,col,value){
                    let index = (row*8 + row) + col ;
                    self.cellule[(row*8+row)+col].value = value;
                    log::info!("value = {}",value);
                    if self.solve(){ // <----------------------------- Recursion starts here
                        return true

                    }
                    self.cellule[(row*8+row)+col].value = 0;
                }

            }
            return false
        },_      =>   { 
            // log::info!("{:?}",self.cellule);
            return true
        },}

}
  • 该函数会检查一些值,如果这些值符合条件,则函数会再次调用自身 (line 90)。
  • 然后它会根据相同的条件检查相同的值并再次调用自己。
  • 再来一次。
  • 再来一次。
  • ...
  • 直到堆栈溢出。

您应该更加小心递归调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?