Solidity

編譯時出錯:堆棧太深

  • November 20, 2021

嘗試編譯時,我收到以下錯誤:

“內部編譯器錯誤:堆棧太深,嘗試刪除局部變數。”

有沒有辦法解決?我不確定我是否能夠刪除足夠多的變數來解決這個問題。

謝謝!

您遇到了StackTooDeepException

Solidity 程式碼在它認為有問題的變數數量上似乎並不一致,但你的限制大約是 16 或 17。(儘管很明顯,16 的下限將是一個啟動的變數。 ..)

CommonSubexpressionEliminator.cppCompilerUtils.cpp

assertThrow(instructionNum <= 16, StackTooDeepException, "Stack too deep, try removing local variables.");

契約編譯器.cpp

solAssert(stackLayout.size() <= 17, "Stack too deep, try removing local variables.");

在沒有看到您的程式碼的情況下,很難進一步評論可能的解決方案,但可以嘗試的一件事是將更大的函式拆分為更小的函式。


2019年編輯:

關於這個錯誤的非常詳細的解釋,以及如何避免它,在文章“堆棧太深”- Solidity 中的錯誤中進行了討論。

引用自:https://ethereum.stackexchange.com/questions/6061