#c #function #pointers #multidimensional-array #compiler-errors
Вопрос:
Я новичок, и в данный момент я в основном просто создаю текстовую игру.
У меня есть функция, но, похоже, она изменяет неправильные элементы массива.
void petStatRead(int statArr[5][7], int* iDPnt, string creature){
int petID = *iDPnt;
int LVL = statArr[0][6];
cout << creature << "'s current Level is: " << LVL << endl;
int EXP = statArr[0][7];
cout << creature << "'s current EXP is: " << EXP << endl;
}
Вместо вывода [0][6]
он выводит [0][7]
и так далее.
Я получаю эту ошибку:
C6385 Считывание недопустимых данных из » statArr[0]»: читаемый размер составляет » 28 «байт, но может быть прочитано «32» байта.
[0][6]
предполагается , что он хранит a 1
, в то время как другие хранят a 0
.
Но тогда это выводит 0
1
результат .
Я совершенно потерян, что я сделал не так?
Комментарии:
1. Доступ
statArr[0][7]
приводит к тому, что ваша программа ведет себя неопределенно (даже если вы, вероятно, получаете результат[1][0]
).2. Индексы массива основаны на 0, поэтому допустимыми индексами для вашего
statArr
массива являются:statArr[0][0]..statArr[0][6]
,statArr[1][0]..statArr[1][6]
, …statArr[4][0]..statArr[4][6]
. Таким образом , доступstatArr[0][7]
технически находится за пределами 1-гоint[7]
массива, расположенного по адресуstatArr[0]
, он достигает 1-гоint
из 2-гоint[7]
массива, расположенного по адресуstatArr[1]
.3. Зачем вы вообще храните эти данные в массиве? Если вы храните данные об уровне рядом с данными об опыте, вам почти наверняка лучше создать структуру/класс с полями
m_experience
иm_level
.