На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania 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'.
Код давай "до" и "после".
Мои программные ништякиhttp://majestio.info
Есть вероятность неправильного обращения с памятью в каком-то другом месте, а введение нового поля просто выявило эту проблему.
Добрый день, весь код довольно длинный и использует сторонний компонент 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 -
Возможно дело в выравнивании
user posted image
Возможно дело в последовательности вызовов класса где определенна переменная?
Цитата secondd @
Вот пример остановки после присвоения значения, Step содержит 1, хотя конструктор присваивает 100, а из Edit идет 20.

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


Рейтинг@Mail.ru
[ Script Execution time: 0,1209 ]   [ 23 queries used ]   [ Generated: 22.06.18, 05:06 GMT ]