运行C++程序时出现"访问冲突"错误

Jef*_*eff 2 c++ arrays runtime-error visual-studio-2010 access-violation

我一直收到错误:

Gofish.exe中0x5a6fca58(msvcr100d.dll)的未处理异常:0xC0000005:访问冲突写入位置0x0ff3b113.

我正在尝试运行的代码是:

#include <iostream>
#include <string>
#include<Array>
using namespace std;

class Card{
 string suit;
 int rank;
public:
 Card(int a, string b){
  rank=a;
  suit=b;
 }
 Card(){}
 string getSuit(){
  return suit;
 }
 int getRank(){
  return rank;
 }
};

class Deck{
 Card deck [52];
public:
 Deck(){
  for(int i=1; i<=13; i++){
  deck [i]=Card(i, "spades");
  deck [i*2]=Card(i, "hearts");
  deck [i*3]=Card(i, "diamonds");
  deck [i*4]=Card(i, "clubs");
  }
 }
  void list(){
  for(int i=1; i<=52; i++){
   cout << deck [i].getRank() << " of " << deck [i].getSuit() << endl;
   }
  }
};

int main(){
 Deck deck=Deck();
 deck.list();
 system("pause");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的编译器是Microsoft Visual C++ 2010 Express,如果这可能会影响任何东西.

Pet*_*ete 6

因为数组是零基础的.您的数组中的最高索引是51,但您尝试访问52.此外,在您的实现中,将永远不会访问索引0处的第一张卡.

deck [i*4-1]=Card(i, "clubs");
Run Code Online (Sandbox Code Playgroud)

  • +1.在甲板上引发一个超出范围的数组异常[52].我不想添加额外的答案,因为你的好,但我想补充一点,从编程101他们教导一个for循环通常是(int i = 0; i <lengthOfMyArray; i ++)所以你行动起来从甲板[0]到甲板[51]. (2认同)