Solidity
編譯時出錯:堆棧太深
嘗試編譯時,我收到以下錯誤:
“內部編譯器錯誤:堆棧太深,嘗試刪除局部變數。”
有沒有辦法解決?我不確定我是否能夠刪除足夠多的變數來解決這個問題。
謝謝!
Solidity 程式碼在它認為有問題的變數數量上似乎並不一致,但你的限制大約是 16 或 17。(儘管很明顯,16 的下限將是一個啟動的變數。 ..)
CommonSubexpressionEliminator.cpp和CompilerUtils.cpp:
assertThrow(instructionNum <= 16, StackTooDeepException, "Stack too deep, try removing local variables.");
solAssert(stackLayout.size() <= 17, "Stack too deep, try removing local variables.");
在沒有看到您的程式碼的情況下,很難進一步評論可能的解決方案,但可以嘗試的一件事是將更大的函式拆分為更小的函式。
2019年編輯:
關於這個錯誤的非常詳細的解釋,以及如何避免它,在文章“堆棧太深”- Solidity 中的錯誤中進行了討論。