当我填充数组(doska)时一切正常,但是当我尝试打印元素时(cout<<
我收到错误
#include <iostream>
using namespace std;
struct doskas{
int number;
char ch;
};
int main(){
auto doska= new doskas[8][8];
auto ss="0abcdefgh";
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
doska[i][j].ch=ss[i];
doska[i][j].number=j;
}
}
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){
cout<<doska[i][j].ch;//ERROR
cout<<doska[i][j].number;
}
system("pause");
return 0;
}
答案 0 :(得分:4)
从0开始尝试,严格小于8,而不是从1到8。
答案 1 :(得分:1)
数组索引必须始终以0开头并以N-1结尾,其中N是数组的大小。请相应地更改所有for循环中的索引变量。像这样:
for(int i=0;i<8;i++)
{
//etc
}
答案 2 :(得分:1)
你只需要在半开放范围[0, N)
中枚举数组索引,一切都很好:
for (int i = 0; i < 8; ++i)
{
for (int j = 0; j < 8; ++j)
{
doska[i][j].ch = ss[i];
doska[i][j].number = j;
}
}
请参阅Dijkstra的famous argument,了解为什么这是考虑范围的最佳方式。