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

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

Восстановить пароль Регистрация
 
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 01:52     Переменная произвольно обнуляется #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
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; как то портит строку перед собой. Собственно, в этом и вопрос: что не так? Как такое может быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 01:52     Переменная произвольно обнуляется
Посмотрите здесь:

C++ при выходе из функции счетчик обнуляется
C++ Почему все обнуляется???
Обнуляется указатель C++
Массив обнуляется и превращается в мусор C++
C++ Почему не обнуляется указатель через функцию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 02:05     Переменная произвольно обнуляется #2
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
int F[][n]; // Массив многочленов.
может стоит поменять на динамический массив?

Добавлено через 1 минуту
Попробовал. С динамическим массивом ошибка перестала вылетать. А так у Вас что-то типа массива нулевого размера получается...
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:10  [ТС]     Переменная произвольно обнуляется #3
хм... Интересно. Спасибо. Только я обратился скорее не за помощью с запуском кода, а за ответом) Мне интересно как эта магия происходит и почему. Может быть вы знаете? Почему вы решили, что динамический массив решит проблему?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 02:15     Переменная произвольно обнуляется #4
А что это по вашему?
C++
1
int F[][n];
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:22  [ТС]     Переменная произвольно обнуляется #5
Массив нулевого размера.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 02:25     Переменная произвольно обнуляется #6
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
Массив нулевого размера.
тогда вопрос, куда вы пишите?
C++
1
this->F[j][i] = model[i];
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:27  [ТС]     Переменная произвольно обнуляется #7
Видимо в никуда... Я думал, раз компилятор такое пропустил, память как то динамически выделяется.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
18.11.2012, 02:29     Переменная произвольно обнуляется #8
Цитата Сообщение от ALL_ZZ Посмотреть сообщение
память как то динамически выделяется.
посмотрел в отладчике, выделяется только столько, сколько указано в n, да и то как-то не понятно выглядит...
Кстати, результат работы Вашего кода с динамическим массивом:
Переменная произвольно обнуляется
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
18.11.2012, 02:34  [ТС]     Переменная произвольно обнуляется #9
Спасибо за помощь)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 02:37     Переменная произвольно обнуляется
Еще ссылки по теме:

C++ после цикла while символьный массив обнуляется?
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Почему во время чтения из файла переменная row_i в цикле постоянно обнуляется? C++

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

Или воспользуйтесь поиском по форуму:
Снусмумрик
 Аватар для Снусмумрик
67 / 3 / 1
Регистрация: 15.11.2012
Сообщений: 20
18.11.2012, 02:37     Переменная произвольно обнуляется #10
Зачем Вам массив нулевой длины? Такие трюки не только опасны, но и код запутывают. Используйте динамические массивы или векторы.
Yandex
Объявления
18.11.2012, 02:37     Переменная произвольно обнуляется
Ответ Создать тему
Опции темы

Текущее время: 04:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru