我的 C++ 程序最近崩溃了,ASAN 向我显示堆栈溢出错误。我最近重写了我的程序以使用多个线程,从那时起程序崩溃了。我怀疑崩溃是由于递归太深而发生的,因为显然在 macOS 上,除主线程之外的线程的堆栈大小都减少了。我将我的源代码与其他类似程序进行了比较。他们通常使用pthread_attr_setstacksize. 但是我正在使用std::thread,我将如何处理这些?
我正在编写一个小程序,用 printf("\219") 打印一个多边形,看看我正在做的事情是否适合我的内核。但它需要调用很多函数,我不知道x86处理器是否可以接受那么多子例程,而且我在google中找不到结果。所以我的问题是它是否会接受这么多函数调用以及最大值是多少。(我的意思是这样的:-)
function a() {b();}
function b() {c();}
function c() {d();}
...
Run Code Online (Sandbox Code Playgroud)
我已经使用了 5 个这样的级别(你知道我的意思,对吧?)
每当我打开 TradeForm 菜单时,我都会在行上收到此错误,内容为 Conditions con = new Conditions();
System.StackOverflowException
Run Code Online (Sandbox Code Playgroud)
这是相关的代码
public partial class TradeForm : Form
{
Conditions con = new Conditions();
public TradeForm()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
if(con.foo >= 1)
{
lst1.Text = "text";
res.Luxuries++;
button1.Hide();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个名为 Properties 的类中
public class Conditions : TradeForm
{
public int foo = 0;
}
Run Code Online (Sandbox Code Playgroud) 我想了解/了解更详细的机制,为什么会抛出堆栈溢出错误?(.Net Fiddle 链接)
(与 DisplayType 存在于接口和抽象类中这一事实有关,重命名后者使其工作。我想了解导致此溢出的执行路径是什么)。
using System;
using System.IO;
public class Program
{
public static void Main()
{
Console.WriteLine("--------BEGIN--------");
FIVan van = new FIVan();
van.DisplayType();
Console.WriteLine("---------END---------");
}
}
public interface IVan
{
public Type TheType {get;}
public void DisplayType() => Console.WriteLine("Generic Type associated with this IVan<T> is : " + TheType.ToString());
}
public abstract class AVan<T> : IVan
where T : class
{
public Type TheType { get => typeof(T);}
// NOTE : renaming DisplayType to something …Run Code Online (Sandbox Code Playgroud) 我已经使用上面的链接实现了深度优先搜索,并且对于我的大多数数据样本都运行良好。当我的数据样本非常大时,代码会达到断点,由于递归函数变得太深,可能会导致堆栈溢出。有什么办法可以避免这种情况吗?或者我是否必须使用其他方式(例如广度优先搜索/并集查找算法)来查找图中的连接组件。
\n#include <bits/stdc++.h>\nusing namespace std;\n \nclass Graph {\n \n // A function used by DFS\n void DFSUtil(int v);\n \npublic:\n int count;\n map<int, bool> visited;\n map<int, list<int> > adj;\n // function to add an edge to graph\n void addEdge(int v, int w);\n \n // prints DFS traversal of the complete graph\n void DFS();\n};\n \nvoid Graph::addEdge(int v, int w)\n{\n adj[v].push_back(w); // Add w to v\xe2\x80\x99s list.\n}\n \nvoid Graph::DFSUtil(int v)\n{\n // Mark the current node as visited and print it\n …Run Code Online (Sandbox Code Playgroud) c++ stack-overflow recursion graph-theory depth-first-search
我正在编写代码来解决问题,并且它适用于较小的输入,但是当增加到较大的输入时,我遇到了堆栈溢出异常:
Stack overflow.
Repeat 3239 times:
--------------------------------
at Program+<>c__DisplayClass0_0.<<Main>$>g__Traverse|3(Point, Direction)
--------------------------------
at Program.<<Main>$>g__Do|0_0()
Run Code Online (Sandbox Code Playgroud)
我还注意到,它声称重复的次数因执行而异,有时我也会得到 ~2300 次重复或 ~2800 次重复。
经过一段时间的调试后,我没有发现代码有任何问题,因此我手动将线程的堆栈大小设置为Int32.MaxValue,代码工作并产生了正确的答案。
我很好奇是否有人知道 C# 如何检测堆栈溢出?在这种情况下,在我看来,C# 过早地预测了堆栈溢出,即使程序确实有机会终止。
此外,为什么 C# 会给出堆栈溢出错误,指出调用已重复x多次,而x每次执行似乎都不同?
任何见解或信息表示赞赏!
当我运行这个简短的程序时,我不断收到堆栈溢出错误!请帮忙!现在它应该做的就是获取用户输入并打印它们的位置(在X和Y坐标中).我不确定Stack溢出错误是什么或如何解决它.
import java.awt.*;
import javax.swing.*;
public class ExplorerPanel extends JFrame {
ExplorerEvent prog = new ExplorerEvent(this);
JTextArea dataa = new JTextArea(15, 20);
JTextField datain = new JTextField(20);
JButton submit = new JButton("Submit");
JTextField errors = new JTextField(30);
public ExplorerPanel() {
super("Explorer RPG");
setLookAndFeel();
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_…
BorderLayout bord = new BorderLayout();
setLayout(bord);
JPanel toppanel = new JPanel();
toppanel.add(dataa);
add(toppanel, BorderLayout.NORTH);
JPanel middlepanel = new JPanel();
middlepanel.add(datain);
middlepanel.add(submit);
add(middlepanel, BorderLayout.CENTER);
JPanel bottompanel = new JPanel();
bottompanel.add(errors);
add(bottompanel, BorderLayout.SOUTH);
dataa.setEditable(false);
errors.setEditable(false);
submit.addActionListener(prog); …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个具有4个功能的计算器,这是基于单词的.当我尝试实现操作选择时,我收到stackoverflow错误.
班级计算器:
package us.plexproductions.main;
import java.util.Scanner;
public class Calculator {
public static int firstnum;
public static int secondnum;
public static int answer;
public static int operation;
Calculator c = new Calculator();
static Scanner s = new Scanner(System.in);
static Operations o = new Operations();
public static void main(String[] args) {
prompt();
start();
}
public static void prompt() {
System.out.println("########################");
System.out.println("#Calculator Version 1.0#");
System.out.println("########################");
System.out.println("************************");
System.out.println("This is a calculator that\ncan add, subtract, multiply, and divide\n" +
"multiple numbers at once.");
System.out.println("------------------------");
System.out.println("Start …Run Code Online (Sandbox Code Playgroud) 以下代码最终会抛出StackOverflow错误吗?
public class TestStackOverflow {
public static void main(String args[]) {
recursion();
}
public static void recursion() {
try {
Thread.sleep(100);
} catch(Exception err) {}
recursion();
}
}
Run Code Online (Sandbox Code Playgroud)
似乎可以Thread.sleep(100);防止StackOverflow错误,但我想知道是否会抛出超时StackOverlow错误?为什么减慢递归会阻止它呢?我想我大多不确定StackOverflow是什么以及为什么这似乎会阻止它?
我试图从sql表中提取数据,将其写入对象,然后将其放在列表中。我正在使用VS2017,C#和MS-SQL 2008。
当我运行代码时,它从SQL表中提取数据。将其转储到一些变量中(我知道这不是最快的,我只是想确认自己正在获取它们),实例化该对象并尝试设置第一个值,然后在set操作中获得堆栈溢出。
为什么可以很好地设置变量并将其打印到屏幕上,而不是将其放入变量中?
错误;
System.StackOverflowException HResult = 0x800703E9消息=引发了'System.StackOverflowException'类型的异常。
类;
class Company
{
public String MDWRowNumber { get => MDWRowNumber; set => MDWRowNumber = value; } //errors here on set => MDWRowNumber = value
public String MDWIdNumber { get => MDWIdNumber; set => MDWIdNumber = value; }
public String MDWCompanyName { get => MDWCompanyName; set => MDWCompanyName = value; }
}
Run Code Online (Sandbox Code Playgroud)
主要;
sql = "SELECT RowNo, Id, Name FROM Company;";
command = new SqlCommand(sql, connection);
reader = command.ExecuteReader();
while (reader.Read()) …Run Code Online (Sandbox Code Playgroud) stack-overflow ×10
c# ×4
c++ ×3
java ×3
recursion ×2
calculator ×1
callstack ×1
gcc ×1
graph-theory ×1
macos ×1
x86 ×1