分割错误:11 -但构建成功

本文关键字:构建 成功 错误 分割 | 更新日期: 2023-09-27 18:04:14

我正在创建一个21点游戏,到目前为止我已经创建了一个Card class和Deck类,我给我的Deck类一个Print函数来查看是否已经创建他把牌洗好。但是当我运行程序时,我得到这个分割错误:11,但构建成功。

主类

    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace BlackJackGameX
    {
        public class MainClass
        {
            public static void Main (string[] args)
            {
                Deck CardDeck = new Deck();
                CardDeck.Print ();
            }
        }
    }

Card Class

using System;
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
    public enum Suit {Spades, Hearts, Clubs, Diamonds}
    public enum FaceValue {Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}
    public class Card
    {
        public Suit CardSuit;
        public FaceValue CardValue;
        public int iValue;
        public Card (Suit cardSuit, FaceValue cardValue, int ivalue)
        {
            CardSuit = cardSuit;
            CardValue = cardValue;
            iValue =ivalue;
        }
        public Card ()
        {
        }
    }
}
<<p> 甲板类/strong>
using System;
using System.Collections.Generic;
using System.Text;
namespace BlackJackGameX
{
    public class Deck
    {
        Random rNumber = new Random();
        List<Card> Cards;
        public int iValue1 = 11;
        public int iValue2 = 2;
        public int iValue3 = 3;
        public int iValue4 = 4;
        public int iValue5 = 5;
        public int iValue6 = 6;
        public int iValue7 = 7;
        public int iValue8 = 8;
        public int iValue9 = 9;
        public int iValue10 = 10;
        public int iValue11 = 10;
        public int iValue12 = 10;
        public int iValue13 = 10;
        public Deck()
        {
            Cards = NewDeck();
            Shuffle();
        }
        public void Shuffle()
        {
            for (int i = 0; i <= 51; ++i) 
            {
                int c = rNumber.Next (1, 53);
                Cards.Add(Cards[c]);
            }
        }
        private List<Card> NewDeck()
        {
            var AllSuits = new Suit[]
            {
                Suit.Spades,
                Suit.Hearts,
                Suit.Clubs,
                Suit.Diamonds
            };
            var AllFaces = new FaceValue[]
            {
                FaceValue.Ace,
                FaceValue.Two,
                FaceValue.Three,
                FaceValue.Four,
                FaceValue.Five,
                FaceValue.Six,
                FaceValue.Seven,
                FaceValue.Eight,
                FaceValue.Nine,
                FaceValue.Ten,
                FaceValue.Jack,
                FaceValue.Queen,
                FaceValue.King
            };
            var AllValues = new int[]
            {
                iValue1,
                iValue2,
                iValue3,
                iValue4,
                iValue5,
                iValue6,
                iValue7,
                iValue8,
                iValue9,
                iValue10,
                iValue11,
                iValue12,
                iValue13
            };
            for (int i = 0; i <= 3; i++) 
            {
                for (int j = 0; j <= 12; j++) 
                {
                    Card newCard = new Card(AllSuits[i], AllFaces[j], AllValues[j]);
                    NewDeck().Add(newCard);
                }
            }
            return NewDeck();
        }
        public void Print()
        {
            Console.WriteLine(Cards[1].CardSuit);
            Console.WriteLine(Cards[1].CardValue);
            Console.WriteLine(Cards[1].iValue);
            Console.ReadLine();
        }
    }
}

分割错误:11 -但构建成功

您的问题是在private List<Card> NewDeck()方法中的Deck类。当你写NewDeck().Add(newCard);你调用函数递归一遍又一遍,直到一个stackoverflow发生。解决方案是为您的套牌定义一个新的本地List<Card>变量,您将向其中添加卡并返回此变量,而不是NewDeck()

在两个for循环之前添加List<Card> myDeck = new List<Card>();,并将NewDeck().Add(newCard);行更改为myDeck.Add(newCard);,将return NewDeck();行更改为return myDeck;

当构建成功时,这意味着编译器能够从您的代码生成目标二进制文件。但这并不意味着你的应用就没有漏洞。它只表示编译成功。

Segmentation fault是一个内存错误,发生在运行时。因此,首先必须有一个成功的构建。

你需要做的是调试你的代码,以确定为什么这个内存错误发生。

你正在解引用一个NULL指针吗?您是否执行超出数组限制的操作?缓冲区溢出(并覆盖指针)吗?这些都是造成隔离的常见原因。的错。错误。

所以,我想说你的问题更多的是关于调试(如何调试分段错误)。为此,我们需要知道错误在什么情况下发生