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

Переменная произвольно обнуляется

18.11.2012, 01:52. Показов 2360. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть класс:
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
template<const int k,const int n>
class GF {
public: 
    int F[][n]; // Массив многочленов.
public:
    // конструктор. Полным перебором заполняем массив многочленов, т.е. строим поле.
    GF() { 
        int model[n];
        int i, j, capacity = pow((double)k,n);
        for(i = 0; i < n; i++) model[i] = 0; 
        // Проходим по всем многочленам.
        for(j = 0; j < capacity; j++) { 
            // Берём в качестве многочлена образец.
            for(i = 0; i < n; i++) {
                this->F[j][i] = model[i]; 
                cout<<this->F[j][i];
            }
            cout<<endl;
            // Прибавляем к образцу единицу (в лексикографическом порядке).
            for(i = 0; i < n; i++) { 
                model[i] = (model[i] + 1) % k;
                if(model[i] != 0) break;
            }
        }
    }
};
В мэйне создаю объект класса:
C++
1
2
3
4
5
    const int k = 3, n = 2;
    int c;
    c = pow((double)k,n);
    GF<k,n> f;
    ofstream out("out.txt");
Переменная с при этом почему то произвольно обнуляется. Это хорошо видно при трассировке: сначала она равна 9, потом, после выполнения строчки с инициализацией объекта она обнуляется. Но это ещё не всё. Попробовал поменять местами:
C++
1
2
3
4
5
    const int k = 3, n = 2;
    int c;
    c = pow((double)k,n);
    ofstream out("out.txt");
    GF<k,n> f;
В таком случае с переменной с всё хорошо, но выскакивает эксепшн об ошибке доступа, когда я пытаюсь обратиться к out. Опять поменял местами:
C++
1
2
3
4
5
    const int k = 3, n = 2;
    GF<k,n> f;
    int c;
    c = pow((double)k,n);
    ofstream out("out.txt");
Теперь сразу после объявления f обнуляются целочисленные константы. Очевидно, GF<k,n> f; как то портит строку перед собой. Собственно, в этом и вопрос: что не так? Как такое может быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2012, 01:52
Ответы с готовыми решениями:

Переменная не обнуляется до конца
Добрый день! Мне необходимо написать программу для расчета функции и вывести все ее значения в...

Переменная в классе сама обнуляется
Сейчас начал изучать SFML и пишу мини-игру для закрепления. Но вопрос с SFML почти никак не связан,...

Почему во время чтения из файла переменная row_i в цикле постоянно обнуляется?
Имеется следующий код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

9
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.11.2012, 02:05 2
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
int F[][n]; // Массив многочленов.
может стоит поменять на динамический массив?

Добавлено через 1 минуту
Попробовал. С динамическим массивом ошибка перестала вылетать. А так у Вас что-то типа массива нулевого размера получается...
1
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:10  [ТС] 3
хм... Интересно. Спасибо. Только я обратился скорее не за помощью с запуском кода, а за ответом) Мне интересно как эта магия происходит и почему. Может быть вы знаете? Почему вы решили, что динамический массив решит проблему?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.11.2012, 02:15 4
А что это по вашему?
C++
1
int F[][n];
1
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:22  [ТС] 5
Массив нулевого размера.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.11.2012, 02:25 6
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
Массив нулевого размера.
тогда вопрос, куда вы пишите?
C++
1
this->F[j][i] = model[i];
1
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:27  [ТС] 7
Видимо в никуда... Я думал, раз компилятор такое пропустил, память как то динамически выделяется.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
18.11.2012, 02:29 8
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
память как то динамически выделяется.
посмотрел в отладчике, выделяется только столько, сколько указано в n, да и то как-то не понятно выглядит...
Кстати, результат работы Вашего кода с динамическим массивом:
Переменная произвольно обнуляется
1
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:34  [ТС] 9
Спасибо за помощь)
0
67 / 3 / 2
Регистрация: 15.11.2012
Сообщений: 20
18.11.2012, 02:37 10
Зачем Вам массив нулевой длины? Такие трюки не только опасны, но и код запутывают. Используйте динамические массивы или векторы.
1
18.11.2012, 02:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2012, 02:37
Помогаю со студенческими работами здесь

Обнуляется указатель
Есть класс: class person { float x, y; float s; block collision(vector&lt;block&gt;::iterator*...

Не обнуляется память
Добрый день. Подскажите пожалуйста. hFileMemory = CreateFileMapping(INVALID_HANDLE_VALUE,...

Не обнуляется vector<string>
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include...

Почему все обнуляется???
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; // прототипы функций void input ( float , char);...


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

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