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

Затирается переменная в DevCPP - C++

Восстановить пароль Регистрация
 
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.11.2012, 20:06     Затирается переменная в DevCPP #1
Проблема возникла в этой теме.
Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Программу я написал в MSVS2008 и она корректно работала,
но стали поступать жалобы, я проверил и обнаружил что в DevCPP возникает ошибка.

Дело в глобальных переменных
divisor, half_life и массиве mask[10]
В ходе заполнения массива mask переменная divisor портится, хотя за пределы массива я не выхожу.
Я проверял адреса этих переменных, смутно помню что там что, но факт есть. Чтобы mask не затирал divisor между ними нужно объявить доп. переменную half_life

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
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
int mask[10]; 
//если поменять местами объявление divisor и half_life всё заработает, т.к. 
// half_life не используется в программе.
// Но если оставить в неизменном виде код, то портится значение divisor,
// затираясь последним элементом массива mask
unsigned long long divisor;     
unsigned long long half_life;
void solve(int l, int r){
    unsigned long long i;
    if (l==r){
        for (i=0, l^=r; l<10; l=l+1)
            i=i*10+mask[l];
        if (!(i%divisor))
                 cout<<"found i="<<i<<endl;
        
    }
    else
        for (int i=l; i<=r; i++){
            if (l-i){
                mask[l]^=mask[i];
                mask[i]^=mask[l];
                mask[l]^=mask[i];
                solve(l+1, r);
                mask[l]^=mask[i];
                mask[i]^=mask[l];
                mask[l]^=mask[i];
            }else
                solve(l+1, r);
            
        }
}
int main(int argc, char* argv[])
{
    setlocale(0, "russian");
    double x = 0;
    int a[10]; 
           //1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18
    divisor=   2*3*2*5*  7*2*3*   11   *13       *2*17;
    for (argc^=argc; argc<10; mask[argc]=argc)argc++;
    solve(0,9);
       cout<<"not found"<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 20:06     Затирается переменная в DevCPP
Посмотрите здесь:

Не удается просмотреть значение переменной в DevCpp C++
Не запускается Devcpp C++
DevCpp не запускаются программы C++
преобразовать код программы из DevCPP в VisualStudio C++
opengl with devcpp C++
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
C++ DevCpp не вводятся спец символы (масти карт)
DevCpp + bgi, очистка дисплея C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.11.2012, 20:24     Затирается переменная в DevCPP #2
Выходишь за пределы, так видно:
C++
1
    for (argc^=argc; argc<10; mask[argc]=argc, cout << argc << endl ) {
Yandex
Объявления
15.11.2012, 20:24     Затирается переменная в DevCPP
Ответ Создать тему
Опции темы

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