Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mr_mczakenberg
65 / 65 / 31
Регистрация: 10.04.2015
Сообщений: 281
#1

Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива) - C++

20.07.2015, 08:41. Просмотров 239. Ответов 5

Небезызвестные крестики-нолики.
Со вчера у меня Компьютер решил изменить свой алгоритм работы и вдруг поставил нолик там, где я его не ждал вовсе.
Где он не мог его поставить вообще, т.к. если нет 100% варианта победы/проигрыша - он ничего не ставит.

Имеем
C++
1
char pole [pole_size_x][pole_size_y]; //собственно наше поле размером X на Y
в данном случае x=y=3
и код на коленке.

Т.к. автор(плохой я человек) не догадался везде тыкнуть проверки на выход за пределы поля 3х3(пока что),
C++
1
left+1 == 3 //с выходом за пределы поля (0,1,2)
и
C++
1
top-1 == -1 //с выходом за пределы в минус
оказалось действительным.

Вот только выхода за пределы не было...
top = -1 успешно проверялось без вылета ,
а вышеуказанная клетка pole[0][3] и вовсе успешно обработалась для вставки туда значения для победы..
SetResult в дебаге мне и правда сказал что функция ставит значение в клетку [0][3] что "порадовало".

Вот только клетка почему-то влепилась в [1][0], т.е. в следующую клетку массива, после [0][2].

Умный С++ решил избавиться от ошибок и сделать вид что он умный?
Миниатюры
Не хотите  ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2015, 08:41     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива)
Посмотрите здесь:

Запись в *char элемента из массива *char[i] C++
Обращение к элементу массива через адрес C++
C++ Задача Таблица. За одно обращение к каждому элементу массива необходимо каждый элемент заменить ближайшим большим следующим за ним
Обращение к элементам линейного списка через элементы массива указателей C++
Обращение к элементам динамического массива через указатели C++
Обращение к элементам массива через биты некоторого числа C++
C++ Функции посчитывающие количество вхождений подстроки в строку, реализация через char* и через шаблон
C++ В чем отличие двумерного массива типа char от массива указателей на char?
C++ Поворот массива на 90 градусов (cannot convert form char to char*)
Приведение массива char[] (или char* ) в LPCTSTR C++
C++ Визначте мінімальний елемент масиву, що кратний 5. Перший елемент масиву дорівнює 500. Розмір масиву 8
C++ Найти минимальный элемент массива (через указатели, запрещено обращаться к элементам массива по индексам)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17404 / 5642 / 353
Регистрация: 30.03.2009
Сообщений: 15,434
Записей в блоге: 26
20.07.2015, 08:50     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива) #2
Открой любую книжку по Си и почитай раздел про массивы. И запомни враз и навсегда. Если что-то работает не так - ищи ошибки у себя, а не у других

http://codepad.org/36vkht6q
Max Dark
шКодер самоучка
1674 / 1475 / 534
Регистрация: 09.10.2013
Сообщений: 3,343
Записей в блоге: 8
Завершенные тесты: 2
20.07.2015, 08:50     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива) #3
mr_mczakenberg, никакой магии...
Ваш массив по сути представляется сплошным куском памяти
C++
1
2
3
// pole[0]  pole[1]  pole[2]     pole[sz-1]
// [=======][=======][=======]...[=======]
//   ^pole[0][1]        ^pole[2][2]
Вылет при выходе за границы будет при попытке прочитать/записать вне принадлежащей программе памяти
Но, как вы понимаете, выход за границы является логической ошибкой.
Ilot
Модератор
Эксперт С++
1785 / 1160 / 225
Регистрация: 16.05.2013
Сообщений: 3,056
Записей в блоге: 5
Завершенные тесты: 1
20.07.2015, 08:51     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива) #4
Двумерные массивы храняться в памяти как одномерные. Так, что все логично.
mr_mczakenberg
65 / 65 / 31
Регистрация: 10.04.2015
Сообщений: 281
20.07.2015, 08:52  [ТС]     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива) #5
Всем спасибо.
Как оказалось все намного проще и никакой магии.

Можно закрывать.
SatanaXIII
20.07.2015, 11:07     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива)
  #6

Не по теме:

mr_mczakenberg, если вас спросят "умеете ли вы стрелять себе в ногу", то можете теперь с гордостью отвечать "да".

Yandex
Объявления
20.07.2015, 11:07     Не хотите ли немного магии? [адресация char] (обращение к масиву через элемент соседнего массива)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru