标签: stack-overflow

C++ 堆栈溢出,如何增加每个线程的堆栈大小?

我的 C++ 程序最近崩溃了,ASAN 向我显示堆栈溢出错误。我最近重写了我的程序以使用多个线程,从那时起程序崩溃了。我怀疑崩溃是由于递归太深而发生的,因为显然在 macOS 上,除主线程之外的线程的堆栈大小都减少了。我将我的源代码与其他类似程序进行了比较。他们通常使用pthread_attr_setstacksize. 但是我正在使用std::thread,我将如何处理这些?

c++ stack-overflow macos multithreading

0
推荐指数
1
解决办法
1465
查看次数

x86 处理器可以调用多少个子例程?

我正在编写一个小程序,用 printf("\219") 打印一个多边形,看看我正在做的事情是否适合我的内核。但它需要调用很多函数,我不知道x86处理器是否可以接受那么多子例程,而且我在google中找不到结果。所以我的问题是它是否会接受这么多函数调用以及最大值是多少。(我的意思是这样的:-)

function a() {b();}
function b() {c();}
function c() {d();}
...
Run Code Online (Sandbox Code Playgroud)

我已经使用了 5 个这样的级别(你知道我的意思,对吧?)

c++ stack-overflow x86 gcc callstack

0
推荐指数
1
解决办法
357
查看次数

尝试初始化变量时出现堆栈溢出错误#

每当我打开 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)

c# stack-overflow

0
推荐指数
1
解决办法
49
查看次数

试图理解为什么这个执行会溢出

我想了解/了解更详细的机制,为什么抛出堆栈溢出错误?(.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)

c# stack-overflow

0
推荐指数
1
解决办法
50
查看次数

在C++中实现深度优先搜索时避免堆栈溢出

网格中三角形面的连通分量

\n

我已经使用上面的链接实现了深度优先搜索,并且对于我的大多数数据样本都运行良好。当我的数据样本非常大时,代码会达到断点,由于递归函数变得太深,可能会导致堆栈溢出。有什么办法可以避免这种情况吗?或者我是否必须使用其他方式(例如广度优先搜索/并集查找算法)来查找图中的连接组件。

\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

0
推荐指数
1
解决办法
461
查看次数

C# 如何检测堆栈溢出?

我正在编写代码来解决问题,并且它适用于较小的输入,但是当增加到较大的输入时,我遇到了堆栈溢出异常:

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每次执行似乎都不同?

任何见解或信息表示赞赏!

c# stack-overflow recursion

0
推荐指数
1
解决办法
120
查看次数

Stack Oveflow错误

当我运行这个简短的程序时,我不断收到堆栈溢出错误!请帮忙!现在它应该做的就是获取用户输入并打印它们的位置(在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)

java stack-overflow

-1
推荐指数
1
解决办法
154
查看次数

在制作基本计算器时获取StackOverFlowError

我正在尝试制作一个具有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)

java stack-overflow calculator

-1
推荐指数
1
解决办法
537
查看次数

Thread.sleep()是否可以防止StackOverflow错误?

以下代码最终会抛出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是什么以及为什么这似乎会阻止它?

java stack-overflow

-1
推荐指数
2
解决办法
97
查看次数

设置对象变量时的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)

c# stack-overflow visual-studio-2017

-1
推荐指数
1
解决办法
65
查看次数