Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 21.06.2016
Сообщений: 14
1

Почему меняется значение константной переменной?

23.09.2016, 18:38. Показов 1578. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Возникла такая проблема. Вовремя выполнения функции меняется значение константного указателя на 0x3f800000. Также другая переменная принимает случайное значение. Все это происходит при i и k = 1
Код функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void vRESOURCE_BUFFER::InitTexCoord()
{
    std::vector <unsigned> out;
    const unsigned * tmp_ids = opengl_buffer_->GenBeffers(MAX_COUNT_SPRITES);
    unsigned used_id = 0;
    float tmp_coord [8];
    for (unsigned i = 0; i < MAX_COUNT_SPRITES; i++)
    {
        out.clear();
        float cof = 1.0f / float(i + 1);
        for (unsigned int k = 0; k < (i + 1); k++)
        {
            unsigned number_sprite = k * 8;
            //bot left
            tmp_coord[number_sprite] = k*cof;
            tmp_coord[number_sprite + 1] = 0.0f;
            //top left
            tmp_coord[number_sprite + 2] = k*cof;
            tmp_coord[number_sprite + 3] = 1.0f;
            //top right
            tmp_coord[number_sprite + 4] = (k + 1)*cof;
            tmp_coord[number_sprite + 5] = 1.0f;
            //bot tight
            tmp_coord[number_sprite + 6] = (k + 1)*cof;
            tmp_coord[number_sprite + 7] = 0.0f;
            opengl_buffer_->BindBuffer(GL_ARRAY_BUFFER_ARB, tmp_ids[used_id]);
            used_id++;
            opengl_buffer_->AddBufferData(GL_ARRAY_BUFFER_ARB, sizeof(float)*8, tmp_coord, GL_STATIC_DRAW_ARB);
            out.push_back(tmp_ids[used_id]);
        };
        texture_coords_.push_back(out);
    }
}
В чем может быть причина?
Миниатюры
Почему меняется значение константной переменной?   Почему меняется значение константной переменной?   Почему меняется значение константной переменной?  

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2016, 18:38
Ответы с готовыми решениями:

Почему значение статической переменной не меняется?
У м еня есть класс, в котором есть статическая переменная - ID работника. В конструкторе я её...

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

Не меняется значение переменной
class A { private: int price; string name; static int all_money; public: A(int price=0,...

Не могу понять где в цикле меняется значение переменной
Доброго времени суток! Сижу и не могу понять где и почему меняется значение digits Код: void...

5
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
23.09.2016, 18:43 2
xKIVIx, Указатель на константу, а адрес-значение указателя не защищено от изменений.
Что не так?
0
0 / 0 / 1
Регистрация: 21.06.2016
Сообщений: 14
23.09.2016, 18:50  [ТС] 3
Хорошо, тогда что могло послужить причиной его изменения?
0
7 / 7 / 7
Регистрация: 20.06.2016
Сообщений: 72
23.09.2016, 20:40 4
Сделайте константный указатель на константные данные.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
23.09.2016, 21:06 5
Лучший ответ Сообщение было отмечено xKIVIx как решение

Решение

C++
1
2
3
4
5
6
7
8
    float tmp_coord [8];//В массиве 8 элементов
 
        for (unsigned int k = 0; k < (i + 1); k++)//При k == 0 всё нормально. Но когда k станет равной 1, то
        {
            unsigned number_sprite = k * 8;//number_sprite == 8
            tmp_coord[number_sprite] = k*cof;//Запись в tmp_coord[8], который уже за пределами массива
            tmp_coord[number_sprite + 1] = 0.0f;//Запись в tmp_coord[9] 
            //и т.д.
Так что Вы просто вышли за пределы массива,
тем самым переписав значение tmp_ids.
Изменение tmp_ids это лишь следствие другой ошибки.
2
0 / 0 / 1
Регистрация: 21.06.2016
Сообщений: 14
24.09.2016, 02:42  [ТС] 6
Спасибо, все заработало=)
0
24.09.2016, 02:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2016, 02:42
Помогаю со студенческими работами здесь

Взятие адреса у константной переменной при объявлении
Можно пример?

Конвертирование константной строковой переменной в указатель на char
Помогите исправить ошибку в коде #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt; ...

Переполнение знаковых целых чисел: почему значение переменной обнуляется, а не записывается младшее значение?
что то не пойму, как происходит переполнение знаковых целых чисел вот #include &lt;iostream&gt; ...

Почему меняется значение переменной?
Здравствуйте. Пишу вот такой код: #include &lt;stdio.h&gt; #include &lt;sys/ioctl.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru