ПрограммированиеФорумОбщее

Странные баги Visual Studio

#0
13:18, 24 июля 2011

Начну сразу без всяких предисловий:

void World::InitializeChunkManager()
{
  ChunksToLoad = new ChunkLoaderData[CHUNKS_PER_SIDE * CHUNKS_PER_SIDE];
  for(int i = 0; i < CHUNKS_PER_SIDE * CHUNKS_PER_SIDE; ++i)
    ChunksToLoad->free = true;
}

Видно, то поле free выставится в true только для первого элемента. Debug и Release сборки обе выставляют true для всех полей, если запустить из студии по F5. Запускаю экзешник, вижу, ессно, что поле true выставлено только у первого. Почему так? Если запустить из студии приложение, то я этой ошибки и не замечу (по невнимательности допустил).

#1
13:21, 24 июля 2011

ArchiDevil
> ChunksToLoad->free = true;

ChunksToLoad[i].free = true;

и будет щасте.

#2
13:22, 24 июля 2011

Sbtrn. Devil
Я это знаю, я уже исправил. Дело в том, что я эту багу искал несколько часов. В студии-то всё правильно запускается.

Проблема-то, не решена. Почему студия запускает что-то другое мне, а не скомпилированный экзешник?

#3
14:23, 24 июля 2011

Хм - ChunksToLoad - указатель на первый элемент массива - поэтому операция -> прокатила. На счет разницы из студии и самозапуск - это конечно загадка.

#4
14:57, 24 июля 2011

ArchiDevil

> Почему студия запускает что-то другое мне, а не скомпилированный экзешник?
Потому что запускаешь из под отладчика.

#5
15:14, 24 июля 2011

NIXIUS
> Хм - ChunksToLoad - указатель на первый элемент массива - поэтому операция ->
> прокатила.

Да, но по коду, я много раз, выходит, делаю присваивание полю первого элемента в массиве значение "истина". Оно так, если я запускаю уже скомпилированный экзешник. Если запустить из студии, то я получу, что поле free у ВСЕХ элементов будет true. Почему так? Это неверно.

Ghost2
> Потому что запускаешь из под отладчика.
И чудесным образом там оказывается то, что я хочу увидеть?) Есть еще одна мистическая хрень - чанки мира заполняются, исходя из соседних. Если в соседних мусор, или они не загружены, то всё заполнится неверно. И вот опять тоже самое - из под студии я получаю идеальную сетку, всё без единой ошибочки. А запуская экзешник, я получаю, как и следовало ожидать, кривую сетку. Как тут ошибки искать, если всё работает непонятным образом?

#6
15:31, 24 июля 2011

ArchiDevil
> Как тут ошибки искать
Ищи тулзу, обнаруживающую использование неинициализированных переменных.
В дебаге ничего не падает, т.к. все переменные инициализируются некоторыми значениямиp, отличными от 0/false. В релизе ничего этого не делается, поэтому в переменных мусор и поведение неопределено.

#7
15:38, 24 июля 2011

RPGman
> Ищи тулзу, обнаруживающую использование неинициализированных переменных.

Студия не умеет? Может быть там какая-нибудь настройка, или что-то подобное?

RPGman
> В дебаге ничего не падает, т.к. все переменные инициализируются некоторыми
> значениямиp, отличными от 0/false.

Так а у меня не падает) И про инициализацию в дебаге я знаю, из-за этого с большими массивами он медленно ворочается.

RPGman
> В релизе ничего этого не делается, поэтому в переменных мусор и поведение
> неопределено.

У меня как раз трабла необычная - в релизе "по F5" всё великолепно, поведение отличное (хотя по коду не должно быть). Ошибок ни с сеткой, ни с тем, что в первом посте, вообще нет. Как студия догадывается, что я хочу увидеть? Телепатия?

#8
16:02, 24 июля 2011

> Телепатия?
Частные проявления UB.

#9
23:17, 24 июля 2011

RPGman
> Ищи тулзу, обнаруживающую использование неинициализированных переменных.
это как минимум Warning.
кажется в С++ есть что то подобное на счет не инициализированных указателей, может и с переменными тоже самое делается, они просто заполненны 0xFEEEFEEE или 0xDDDDDDDD.

#10
0:46, 25 июля 2011

пишите убийцу майнкрафта и/или редактор ресурсов к онному?)

#11
1:13, 25 июля 2011

cheprogrammer
Убивцу, убивцу.

#12
6:08, 25 июля 2011

ArchiDevil
> У меня как раз трабла необычная - в релизе "по F5" всё великолепно, поведение
> отличное (хотя по коду не должно быть). Ошибок ни с сеткой, ни с тем, что в
> первом посте, вообще нет. Как студия догадывается, что я хочу увидеть?
> Телепатия?
Переключи в hexademical view. Что у тебя в булевских переменных? 1, 0xcdcd или мусор?
И конструктор ChunkLoaderData еще бы.


PS. Чудес не бывает :)

ПрограммированиеФорумОбщее

Тема в архиве.