Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Переменная изменяет значение сама по себе..


Автор: Den64 6.1.2009, 23:01
Использую Turbo C++. Проблема: после выполнения строки SQL->Active = true; само по себе меняется поле  stage. Было "" стало "тЛ".
stage объявляю так:
Код

  class ColStr
{
  public:
    // другие поля
    char stage[1024];
    void Clear(void)
    {
        *stage = 0;
    };
    // метод //(чтоб назагромождать)
    ColStr(void)
    {
        Clear();
    }
};

class SelectQuery
{
  public:

    ColStr FindCol;
};

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    SelectQuery _MyObj;
    MyObj = &_MyObj;
}
 

Бажная функция:
Код

void __fastcall TMainForm::N18Click(TObject *Sender)
{
    // Sort by FIO
    strcpy(MyObj->OrderStr, "ORDER BY ФИО");
    SQL->SQL->SetText(MyObj->GetQuestion());
    SQL->Active = true;
}
 
Сначала так:
user posted image
Жму F8, и вот так!:
user posted image

Подскажите в чём может быть проблема?

Автор: TiKKi 7.1.2009, 03:56
Цитата(Den64 @ 6.1.2009,  23:01)
Код

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    SelectQuery _MyObj;
    MyObj = &_MyObj;
}

Область видимости для _MyObj ограничивается методом FormCreate.


Автор: Den64 7.1.2009, 21:13
Пределал так:

Код

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    MyObj = new SelectQuery;
}


Блольше таких проблем не возникает.. Наверно были проблемы с выделением памяти..

Автор: TiKKi 8.1.2009, 04:06
Цитата(Den64 @ 7.1.2009,  21:13)
Наверно были проблемы с выделением памяти..

Конечно были! Я же написал про область видимости.
Код

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    SelectQuery _MyObj;
    MyObj = &_MyObj;
}

 _MyObj локальная переменная в методе FormCreate. Метод завершился, переменная убилась, а указатель остался и указывает он теперь на не существующую переменную. 

Автор: Den64 8.1.2009, 21:40
Цитата(TiKKi @  8.1.2009,  04:06 Найти цитируемый пост)
 _MyObj локальная переменная в методе FormCreate. Метод завершился, переменная убилась, а указатель остался и указывает он теперь на не существующую переменную. 

Спасибо, догнал..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)