LINUX.ORG.RU

Где ошибка?

 , ,


0

2

Вот ссылка на github https://github.com/xverizex/select
Там программа. При запуске отображается сетка из элементов.
Можно нажимать вверх,влево,вниз,вправо, и переходить по элементам. 'q' выйти.
Ошибка возникает, когда появляется возможность выйти за пределы сетки, но как? Я же запретил это делать.

if ( x->up )
{
Может у меня чего неправильно с распределением блоков?

А ты проинициализировал эти поля чтобы там были NULL'ы как ты ожидаешь, позорище?

slovazap ★★★★★ ()
Последнее исправление: slovazap (всего исправлений: 1)

Мдя. И где? где ты запретил выходить за пределы? Номер строки? Эко тебя штормит. А вообще плохому танцору всегда что то мешает.

Silerus ★★ ()
Ответ на: комментарий от u0atgKIRznY5

После объявления массива нужно инициализировать его ячейки (memset например), так как в них мусор.

anonymous ()
Ответ на: комментарий от Silerus

Ну да, NULL поставил, посмотри, я обновил board.c. Тока теперь, если идти вправо, то можно выйти на другой строки слева, как так? Разве у меня так такая логика?

u0atgKIRznY5 ()
Ответ на: комментарий от Silerus

Сделал ещё, теперь и влево не идёт, но вправо не могу сделать. Убраз free, чтобы не переходило с левой стороны.

u0atgKIRznY5 ()
Ответ на: комментарий от u0atgKIRznY5

Лучше всетаки nullptr. И вот так вот проверять наличие указателя

if ( x->right )
- это как то не комильфо.

Silerus ★★ ()
Ответ на: комментарий от u0atgKIRznY5

кроме того есть маленькая хитрость из шахмат, чтоб шахматная программа не убегала за края доски - доску делают больше на несколько клеток.

Silerus ★★ ()

Ваш код нечитабельное говно. Я старался прочесть, правда. Извините.

ox55ff ★★ ()
Ответ на: комментарий от ox55ff

вродеж общие нововведение на весь стандарт, а null - в нежелательное пихнули.

Silerus ★★ ()
Ответ на: комментарий от Silerus

Это же не java, здесь можно и так проверить, короче, щас попробую malloc заменить на calloc, там нули будут и может быть поможет.

u0atgKIRznY5 ()
				switch(event.key.keysym.sym)
				{
					case SDLK_q:
						exit(0);
						break;

А память за тебя кто освобождать будет?

	start = malloc ( sizeof ( struct item ) );
	start->right = malloc ( sizeof ( struct item ) );
	...
	l = start->right;
	t = l;
	p = l;

	for ( int i = 0; i < w; i++ )
	{
		t->left = NULL;
	...
	return start->right;

А нафига тебе start тогда?

И так весь код, и даже комментарии в git'е абсолютное дно. Ты, видимо, необучаемый.

anonymous ()

Да как запретить вправо блин, не могу понять.

u0atgKIRznY5 ()
Ответ на: комментарий от u0atgKIRznY5

Ядрена вошь, ты реально тупой. Я похожий алгоритм делал, будучи школотой. Хотя стоп, не похожий, точно такой же. И на это у меня три минуты от силы ушло.

anonymous ()
Ответ на: комментарий от u0atgKIRznY5

ну давай давай, - это называется гадание на кофейной гуще.

Silerus ★★ ()
Ответ на: комментарий от ox55ff

Куда-то исходник пропал, а я не успел посмотреть на очередное творение :( может у кого сохранился?

pftBest ★★★★ ()
Ответ на: комментарий от pftBest

подожди новой темы от ТС, там будет не лучше - инфа 100% ;)

anonymous ()
Ответ на: комментарий от pftBest

У меня как получилось, я удалил, там можно любую площадь задать, но так как я установил корректоры на всякий случай, то теперь приходиться отображать тоже указывая сколько на сколько.

u0atgKIRznY5 ()
Ответ на: комментарий от pftBest

Вот лучше щас, посмотри, я новые изменения не внёс сразу, но теперь внёс.

u0atgKIRznY5 ()
Ответ на: комментарий от u0atgKIRznY5

Нет, не успел, ты что, на шесть минут открыл только?

pftBest ★★★★ ()
Ответ на: комментарий от pftBest

Ну а зачем она на github'е, я её сделал доступной, чтобы помогли с решением проблемы. Что открыть чтоли?

u0atgKIRznY5 ()

board.c

player2_litco_ruka1_tex

anonymous ()
Ответ на: комментарий от anonymous

Он не видит анонимусов. Обидели видать.

anonymous ()
Ответ на: комментарий от u0atgKIRznY5

Ты все сильно запутал. зачем каждой клетке знать всех своих соседей? зачем у каждой клетки есть указатель на ее текстуру? Ты смешиваешь содержание и представление, так делать не хорошо.

pftBest ★★★★ ()

Ошибка возникает, когда появляется возможность выйти за пределы сетки, но как? Я же запретил это делать.

Я, наверное, слепой, но где ты там проверяешь на выход из пределов?

Bfgeshka ★★★★★ ()
Ответ на: комментарий от Bfgeshka

Он проверяет есть ли у клетки указатель на ее соседа. Если есть переходит по нему.

pftBest ★★★★ ()

У меня один вопрос - зачем делать сложным то, что можно сделать простым?

andreyu ★★★★★ ()

обожечкитымой! ты вообще не обучаемый, чтоль? Тебе в эти ошибки уже тыкали носом. Если ты не слушаешь советов, накой хер ты вообще их спрашиваешь?

anonymous ()
Ответ на: комментарий от pftBest

Сами if'ы видел, но сразу не понял, чего он там наворотил в отдельном файле и где вообще используются поля.

Как уже сказали, можно было так и не воротить.

Bfgeshka ★★★★★ ()

Не благодари, я связался с clang-tidy для тебя, и передаю тебе его варнинги. Сам код я конечно же не читал, но возможно он подсказал что-то дельное... https://pastebin.com/DKcz1N8u

fsb4000 ★★ ()
Ответ на: комментарий от pftBest

Но так же потом легче переходит на любую ячейку. Текстура всё равно одна. Когда нужно перейти, меняется указатель на текстуру, чтобы видно было какая ячейка следующая подсвечена.

Ты все сильно запутал. зачем каждой клетке знать всех своих соседей?

Я хотел так написать. А как ещё можно?

u0atgKIRznY5 ()
Ответ на: комментарий от u0atgKIRznY5

Да хотя бы так:

int x = width / 2;
int y = height / 2;

while(1)
{
   switch (direction)
   {
   case up:
      if (y > 0) y--;
      break;
   case down:
      if (y + 1 < height) y++;
      break;
   case left:
      if (x > 0) x--;
      break;
   case right:
      if (x + 1 < width) x++;
      break;
   }
}
andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Я как то писал текстовую игру. Там в дикой местности, лес кругом, вокруг животных разных много, домик в лесу. Так там, когда зверь хотел пить, он знал где есть река. Либо если медведь, то он выкапывал, и вполне возможно, что находил воду. Так вот, насчёт реки. В расчёт бралось то, что животные давно живут в лесу и знают где вода. У меня животное обдумывало свой короткий маршрут подсчитав сколько нужно сделать ходов до реки. Там тоже ссылки на соседние территории были, и это очень удобно, вычислять относительно своего места, но там ещё координаты были, так что они тоже в ход шли, чтобы вычислить короткий маршрут. Было интересно писать такую игру. Блокнотик для записей чего угодно. В домике телевизор с отображением координат, где поблизости и на каких координатах было движение. Ветер запах распространял, так что если долго не мыться, то животное пойдет по запаху и может найти тебя, разумеется, если это хищник, если не хищник, то убежит. Спасало также случайная смена направления ветра. Животные между собой кусались. Кто оказался сильнее, тот остался в живых. У меня в какой то момент появилась ошибка segfault ( наверное, но уже не помню ), и я не захотел искать её, так она и осталась незавершенной. Нет сценария. Но можно ходить по лесу, дорогам, есть времена года, зима, весна, осень, лето. Можно узнать по следам кто проходил на местности, когда и кто. Так же по цвету кала определить чем животное питалось, так как, может оно не опасное. Там также нужно было избегать опасных животные, при встрече с ними можно было предпринять ряд действий. Если животное не хищник, то можно было попробывать поймать его, чтобы съесть потом. От хищников можно было на деревья залезать. Прочность деревьев тоже учитывалось. Можно было собирать ягоды и ореги с опавших деревьев. Ягоды росли постоянно, так что можно было на одних лишь ягодах прожить. Хотел придумать сюжет, но ничего так и не придумал. Но всё равно было немного текста. И я считал что можно будет самому качественне представить что написано, чем попытаться превзойти человеческое виденье.

u0atgKIRznY5 ()
Ответ на: комментарий от u0atgKIRznY5

Лучше сложный в макрос обернуть, чем лицезреть столько телодвижений для такого простого действия.

Bfgeshka ★★★★★ ()
Ответ на: комментарий от u0atgKIRznY5

С трудом осилил ваш поток сознания, но так и не понял, что вы хотели сказать.

andreyu ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.