คำถามติดแท็ก stack-overflow

ไม่ใช่เว็บไซต์นี้! ใช้แท็กนี้สำหรับข้อผิดพลาดที่เกิดจากการพุชรายการมากเกินไปใน callstack หากคุณมีคำถามเกี่ยวกับเว็บไซต์นี้โปรดไปที่ https://meta.stackoverflow.com


6
การลองในที่สุดบล็อกจะป้องกัน StackOverflowError
ดูสองวิธีต่อไปนี้: public static void foo() { try { foo(); } finally { foo(); } } public static void bar() { bar(); } การรันbar()อย่างชัดเจนส่งผลให้ a StackOverflowErrorแต่การรันfoo()ไม่ได้ (โปรแกรมดูเหมือนว่าจะรันไปเรื่อย ๆ ) ทำไมถึงเป็นอย่างนั้น?

6
Python ปรับหางแบบวนซ้ำให้เหมาะสมหรือไม่?
ฉันมีรหัสต่อไปนี้ซึ่งล้มเหลวด้วยข้อผิดพลาดต่อไปนี้: RuntimeError: เกินความลึกการเรียกซ้ำสูงสุด ฉันพยายามเขียนสิ่งนี้เพื่ออนุญาตการปรับให้เหมาะสมแบบเรียกซ้ำหาง (TCO) ฉันเชื่อว่ารหัสนี้ควรจะประสบความสำเร็จหาก TCO เกิดขึ้น def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n) print(trisum(1000, 0)) ฉันควรสรุปได้หรือไม่ว่า Python ไม่ได้ทำ TCO ประเภทใดหรือฉันต้องกำหนดมันให้แตกต่างกันหรือไม่?

9
จะเพิ่มขนาด Java stack ได้อย่างไร?
ฉันถามคำถามนี้เพื่อทำความรู้จักวิธีเพิ่มขนาดรันไทม์ call stack ใน JVM ฉันมีคำตอบสำหรับเรื่องนี้และฉันยังมีคำตอบและความคิดเห็นที่เป็นประโยชน์มากมายที่เกี่ยวข้องกับวิธีที่ Java จัดการกับสถานการณ์ที่จำเป็นต้องใช้สแต็กรันไทม์ขนาดใหญ่ ฉันขยายคำถามของฉันพร้อมกับสรุปคำตอบ เดิมทีฉันต้องการเพิ่มขนาดสแต็ก JVM เพื่อให้โปรแกรมต่างๆทำงานโดยไม่มีไฟล์StackOverflowError. public class TT { public static long fact(int n) { return n < 2 ? 1 : n * fact(n - 1); } public static void main(String[] args) { System.out.println(fact(1 << 15)); } } การตั้งค่าคอนฟิกูเรชันที่สอดคล้องกันคือjava -Xss...แฟล็กบรรทัดคำสั่งที่มีค่ามากเพียงพอ สำหรับโปรแกรมTTด้านบนจะทำงานเช่นนี้กับ JVM …

2
เหตุใด #include <string> จึงป้องกันข้อผิดพลาดสแต็กล้นที่นี่
นี่คือรหัสตัวอย่างของฉัน: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class MyClass { string figName; public: MyClass(const string&amp; s) { figName = s; } const string&amp; getName() const { return figName; } }; ostream&amp; operator&lt;&lt;(ostream&amp; ausgabe, const MyClass&amp; f) { ausgabe &lt;&lt; f.getName(); return ausgabe; } int main() { MyClass f1("Hello"); cout …

9
C # จับข้อยกเว้นสแตกล้น
ฉันมีการเรียกแบบเรียกซ้ำไปยังเมธอดที่ทำให้เกิดข้อยกเว้นสแต็กโอเวอร์โฟลว์ การโทรครั้งแรกล้อมรอบด้วยบล็อก try catch แต่ไม่พบข้อยกเว้น ข้อยกเว้นของสแตกล้นทำงานในลักษณะพิเศษหรือไม่? ฉันสามารถจับ / จัดการข้อยกเว้นได้อย่างเหมาะสมหรือไม่? ไม่แน่ใจว่าเกี่ยวข้องหรือไม่ แต่ข้อมูลเพิ่มเติม: ไม่มีข้อยกเว้นในเธรดหลัก วัตถุที่รหัสกำลังส่งข้อยกเว้นจะถูกโหลดด้วยตนเองโดย Assembly.LoadFrom (... ) CreateInstance (... )

6
Chrome / jQuery Uncaught RangeError: เกินขนาดสแต็กการโทรสูงสุด
ฉันได้รับข้อผิดพลาด "Uncaught RangeError: ขนาดสแต็กการโทรสูงสุดเกิน" บน Chrome นี่คือฟังก์ชั่น jQuery ของฉัน $('td').click(function () { if ($(this).context.id != null &amp;&amp; $(this).context.id != '') { foo($('#docId').val(), $(this).attr('id')); } return false; }); สังเกตว่ามีเซลล์นับหมื่นในหน้า อย่างไรก็ตามโดยทั่วไปฉันเชื่อมโยงสแต็คล้นกับการเรียกซ้ำและในกรณีนี้เท่าที่ฉันเห็นไม่มีเลย การสร้างแลมบ์ดาเช่นนี้จะทำให้เกิดภาระในสแตกโดยอัตโนมัติหรือไม่? มีวิธีใดบ้าง? ในขณะนี้วิธีแก้ปัญหาเดียวที่ฉันมีคือการสร้างเหตุการณ์ onclick อย่างชัดเจนในแต่ละเซลล์เมื่อแสดงผล HTML ซึ่งทำให้ HTML มีขนาดใหญ่ขึ้นมาก

7
ทำไมวิธีนี้ถึงพิมพ์ 4?
ฉันสงสัยว่าจะเกิดอะไรขึ้นเมื่อคุณพยายามจับ StackOverflowError และใช้วิธีการต่อไปนี้: class RandomNumberGenerator { static int cnt = 0; public static void main(String[] args) { try { main(args); } catch (StackOverflowError ignore) { System.out.println(cnt++); } } } ตอนนี้คำถามของฉัน: ทำไมวิธีนี้จึงพิมพ์ '4' ฉันคิดว่าอาจเป็นเพราะSystem.out.println()ต้องการ 3 ส่วนในกองการโทร แต่ฉันไม่รู้ว่าหมายเลข 3 มาจากไหน เมื่อคุณดูซอร์สโค้ด (และ bytecode) ของSystem.out.println()โดยปกติจะนำไปสู่การเรียกใช้เมธอดมากกว่า 3 (ดังนั้น 3 เซ็กเมนต์บน call stack จึงไม่เพียงพอ) หากเป็นเพราะการปรับให้เหมาะสม …
111 java  jvm  stack-overflow 

5
เหตุใดจึงสามารถกู้คืนจาก StackOverflowError ได้
ฉันประหลาดใจที่เป็นไปได้ที่จะดำเนินการต่อแม้ว่าStackOverflowErrorจะเกิดขึ้นใน Java แล้วก็ตาม ฉันรู้ว่าStackOverflowErrorเป็นคลาสย่อยของคลาส Error ข้อผิดพลาดของคลาสถูกแยกออกเป็น "คลาสย่อยของ Throwable ที่บ่งชี้ถึงปัญหาร้ายแรงที่แอปพลิเคชันที่สมเหตุสมผลไม่ควรพยายามจับ" สิ่งนี้ฟังดูเหมือนคำแนะนำมากกว่ากฎโดยระบุว่าการจับข้อผิดพลาดเช่น StackOverflowError นั้นได้รับอนุญาตในความเป็นจริงและขึ้นอยู่กับเหตุผลของโปรแกรมเมอร์ที่จะไม่ทำเช่นนั้น และดูฉันทดสอบรหัสนี้และมันจะสิ้นสุดตามปกติ public class Test { public static void main(String[] args) { try { foo(); } catch (StackOverflowError e) { bar(); } System.out.println("normal termination"); } private static void foo() { System.out.println("foo"); foo(); } private static void bar() { System.out.println("bar"); …

10
“ สแตกล้น” เกิดขึ้นได้อย่างไรและคุณจะป้องกันได้อย่างไร
สแตกล้นเกิดขึ้นได้อย่างไรและวิธีใดที่ดีที่สุดเพื่อให้แน่ใจว่าจะไม่เกิดขึ้นหรือวิธีป้องกันโดยเฉพาะอย่างยิ่งบนเว็บเซิร์ฟเวอร์ แต่ตัวอย่างอื่น ๆ ก็น่าสนใจเช่นกัน

15
gson.toJson () พ่น StackOverflowError
ฉันต้องการสร้างสตริง JSON จากวัตถุของฉัน: Gson gson = new Gson(); String json = gson.toJson(item); ทุกครั้งที่ฉันพยายามทำสิ่งนี้ฉันได้รับข้อผิดพลาดนี้: 14:46:40,236 ERROR [[BomItemToJSON]] Servlet.service() for servlet BomItemToJSON threw exception java.lang.StackOverflowError at com.google.gson.stream.JsonWriter.string(JsonWriter.java:473) at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:347) at com.google.gson.stream.JsonWriter.value(JsonWriter.java:440) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:235) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:220) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:200) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:843) นี่คือคุณสมบัติของคลาสBomItemของฉัน: private int …


6
รหัสแฮชของ ArrayList ที่มีตัวมันเองเป็นองค์ประกอบ
เราสามารถหาhashcodeของlistที่มีตัวมันเองเป็นelement? ฉันรู้ว่านี่เป็นวิธีปฏิบัติที่ไม่ดี แต่นี่คือสิ่งที่ผู้สัมภาษณ์ถาม เมื่อฉันรันรหัสต่อไปนี้มันจะพ่น a StackOverflowError: public class Main { public static void main(String args[]) { ArrayList&lt;ArrayList&gt; a = new ArrayList(); a.add(a); a.hashCode(); } } ตอนนี้ที่นี่ฉันมีสองคำถาม: ทำไมถึงมีStackOverflowError? เป็นไปได้ไหมที่จะหารหัสแฮชด้วยวิธีนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.