我一直收到错误:
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;
}
我正在使用的编译器是Microsoft Visual C 2010 Express,如果这可能会影响任何东西 .
4 回答
因为数组是零基础的 . 您的数组中的最高索引是51,但您尝试访问52.此外,在您的实现中,将永远不会访问索引0处的第一张卡 .
在大小
52
的数组deck
中,您尝试使用无效的索引52
.您可以将
for
循环更改为:这看起来像家庭作业所以我会给你一些提示:
检查你的for循环逻辑 .
请记住,数组中的第一个条目是0而不是1 .
除了数组索引溢出问题 . 这可能有问题:
没有必要:你可以简单地写一下
Deck deck;
. 但是这样,如果您的编译器没有执行任何优化,您最终可能会尝试使用默认的assingment运算符复制Deck
对象,该运算符执行成员复制 . 因此,将尝试复制Card
固定大小的数组,并将一个固定大小的数组复制到另一个不能正常工作 .