На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Добавление переменной в хедер приводит к ошибке , 'Access violation at address 00D23E5D in module 'BORLNDMM.DLL'. Write of address 00000001'.
    RAD 2009 C++ попал на странно-непонятное поведение, добавляю переменную в хедер класса (int,bool) в Private секцию и вся программа либо валится с экземпшеном либо работает, но как будто все переменные не инициализированы конструктором (все остальные). Переставил переменную на несколько строк выше, ошибка пропала. Добавил еще одну переменную так же выше - снова ошибки.
    Подскажите пожалуйста кто-нибудь сталкивался с таким поведением?

    Project TestRegress.exe raised exception class EAccessViolation with message 'Access violation at address 00D23E5D in module 'BORLNDMM.DLL'. Write of address 00000001'.
      Код давай "до" и "после".
        Есть вероятность неправильного обращения с памятью в каком-то другом месте, а введение нового поля просто выявило эту проблему.
          Добрый день, весь код довольно длинный и использует сторонний компонент teechart. Пытался локализовать проблему дабы уменьшить код, но не тут то было, ошибка появляется/пропадает в ответ на совершенно разные изменения кода, точнее уже не ошибка а проблема инициализации переменных класса.

          Например, есть Unit1 и есть класс TSysRgrss, в хедере класса объявлены переменные, в конструкторе инициализация некоторых из них. При создании его экземпляра (одинаково для статич/динамич) в Unit1 public переменным присваиваются значения. Так вот при добавлении новых переменных в хедер класса или при комменте/раскомменте частей кода в разных местах проекта получаю непредсказуемые данные в переменных. Так для Step может быть 100 из конструктора, 20 от позднего присвоения или что угодно другое.

          Вот пример остановки после присвоения значения, Step содержит 1, хотя конструктор присваивает 100, а из Edit идет 20.
          http://imagehost.cc/image/Z5ZKF

          Edit содержит 20.
          http://imagehost.cc/image/Z5y6f

          Добавлено
          Хедер класса выглядит так

          ExpandedWrap disabled
            #ifndef TSysRgrssH
            #define TSysRgrssH
            #include <Classes.hpp>
            #include "Unit1.h"
            //---------------------------------------------------------------------------
            class TSysRgrss {
            private:
                bool Data;
                bool Trade;
             
                int StepCounter;
                double LastPrice;
                int jump;
             
                //double FcstAim;
                //double FcstDrdn;
                //bool FcstUp;
             
                //double y[40000]; int n;
                //double y2[40000];
                //double y3[40000]; int z3; int n3;
                //double y4[1000]; int n4;
             
             
                struct logic {
                    bool opbuy;
                    bool opsell;
                    bool clbuy;
                    bool clsell;
                    int opdev;
                    int cldev;
                } LnLogic[3][3][3];
             
             
                 struct DiapArr {
                         int Points;
                         int MainCalcPnt;
                         double a;
                         double b;
                         double stdev;
                         double m;
                         int trend;
                         bool broken;
                         bool ok;
                         bool hitmid;
                 } Diap1;
             
                 int PrevLength;
                 bool BuyGranted;
                 bool SellGranted;
                 double OpenDev;
                 double CloseDev;
                 double Lastbx;
                 double LastChange;
                 int lstdrctn;
                 int lstchng;
                 int lstaclr;
                 int PrevLastPivot;
             
             
                 int lstchng2;
             
                 //---------------------------------------------------------------------------
             
                 struct PtArr {
                         int n;
                         bool lasthi;
                         double pr[20];
                         int tick[20];
                         //TDateTime dt[20];
                         double disp[20];
                 } HL;
                //---------------------------------------------------------------------------
             
            public:
             
                __fastcall TSysRgrss();
                __fastcall ~TSysRgrss();
             
                struct vsedata {
                         int p;
                         //TDateTime t[600000];
                         double pr[50000];
                         //double bid[600000];
                         //double ask[600000];
                } vse[1];
             
                void __fastcall NewTick(double price, int point, bool show);
                void __fastcall GotTrade(bool buy, double price, int id, int amount, int instr);
             
             
                void __fastcall RangeData(vsedata *v, double DiapMin, double DiapMax,  double offset, int& pivots, int& length, double& width, double brakeratio, bool& broken, double& moveup, double& movedown, int tk, bool show);
                void __fastcall RangePointsSearch(vsedata *v, double DiapMin, double DiapMax,  double offset, int& pivots, int& length, double& width, double brakeratio, bool& broken, int tk, bool show);
             
                int Step;                      
                int RegLength;                  
                int Compression;                
                double Angle;                
                double OldOrderOff;            
                double Breakout;            
                double MinStDev;          
                double Stop;                    
                double MaxSize;                
                double Size;
            };
            #endif


          Конструктор

          ExpandedWrap disabled
            //---------------------------------------------------------------------------
            #pragma hdrstop
             
            #include "TSysRgrss.h"
            #include "Unit1.h"
             
             
            //---------------------------------------------------------------------------
            #pragma package(smart_init)
            __fastcall TSysRgrss::TSysRgrss()   // конструктор
            {
                //инициализация
                Step=100;
                Data=false;
                Trade=false;
                vse[0].p=0;
                Order=0;
                Position=0;
                StepCounter=0;
                LastPrice=0;
                LastChange=0;
                Lastbx=0;
                PrevLength=200;
                jump=0;
                HL.n = 0;
             
                RegLength=200;
                Compression=1;
                //Step=100;
             
                OldOrderOff=40;                  
                Stop=30;    
                MaxSize=1;                  
                Size=1;        
            }
             
            __fastcall TSysRgrss::~TSysRgrss()   // деструктор
            {
             
               //
            }
          Сообщение отредактировано: secondd -
            Возможно дело в выравнивании
              Возможно дело в последовательности вызовов класса где определенна переменная?
              Цитата secondd @
              Вот пример остановки после присвоения значения, Step содержит 1, хотя конструктор присваивает 100, а из Edit идет 20.

              Это не показатель, там может быть любой "мусор".
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0353 ]   [ 16 queries used ]   [ Generated: 29.03.24, 14:16 GMT ]