Access violation write to 0x3FF3AAC7 in... - страница 3

 
Nauris Zukas:
Если размер массива доходит до 131070 (ArraySize(х)=131070; ArrayRange(х,0)=43690), то выскакивает эта ошибка. Если ограничить до этого размера 131070 и дальше не добавлять, то все порядке.
Есть какое-то ограничение размеру массива?

это похоже на целочисленное переполнение 0x1FFFF = 131071
возможно баг в МТ.


вот давали бы осмысленные названия было бы чуть понятней :)

/+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TestFunction(Test);
  }
//+------------------------------------------------------------------+
struct Struct
  {
   double            TestDouble;
  };
Struct Test[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TestFunction(Struct &Str[])
  {
   int CheckSize=ArraySize(Str);
   Print("-0- CheckSize: ",CheckSize);
  }
 

Taras Slobodyanik:

вот давали бы осмысленные названия было бы чуть понятней)

Благодарю!

 
Aliaksandr Hryshyn:
Это ошибка компилятора, лучше предоставить информацию разработчикам для исправления

При чём тут компилятор и разработчики? Ошибка исполнения, суть - выход за пределы адресного пространства данных. Причина - чрезмерный размер массива. Ошибка произошла при попытке записи в новый его элемент. Всё. 

 
Nauris Zukas:

Всё таки не понятно с указателем на массив, как это мне может решить проблему. При самом заполнение массива уже access violation и даже до вызова функций не доходит. Вот сделал отдельный кусок для тестов, если M1 баров достаточна то access violation (в моем случае 43690). Попробуйте на своей платформе, если появится access violation, как вы бы переделали конкретный пример?

Естественно. На своей платформе повторять не буду. 

У Вас цикл организован неверно. Поэтому выход за всякие пределы. Нулевой бар участвует в подсчёте общего количества баров

 
Алексей Тарабанов:

Естественно. На своей платформе повторять не буду. 

У Вас цикл организован неверно. Поэтому выход за всякие пределы. Нулевой бар участвует в подсчёте общего количества баров

К чему это? Все уже решено здесь.

Access violation write to 0x3FF3AAC7 in...
Access violation write to 0x3FF3AAC7 in...
  • 2021.02.18
  • www.mql5.com
Что за ошибка в индикаторе появилась и не как не избавится? DLL не использует...
 
Taras Slobodyanik:

вот давали бы осмысленные названия было бы чуть понятней :)

У структуры можно заранее задать значение? Например для массива это выглядит так double TestLinReg[5]={2.8,3.4,4,4.6,5.2}; У структуры можно так сделать?

struct Profit_Arr
  {  
   double            ProfitP={2.8,3.4,4,4.6,5.2}; // можно заранее задать значение ???
  };
Profit_Arr Profit[5];

//double TestLinReg[5]={2.8,3.4,4,4.6,5.2};
 
Nauris Zukas:

У структуры можно заранее задать значение? Например для массива это выглядит так double TestLinReg[5]={2.8,3.4,4,4.6,5.2}; У структуры можно так сделать?

описание жеж есть:

Конструктор - это специальная функция, которая вызывается автоматически при создании объекта структуры или класса и обычно используется для инициализации членов класса. Далее мы будем говорить только о классах, при этом все сказанное относится и к структурам, если не оговорено иное. Имя конструктора должно совпадать с именем класса. Конструктор не имеет возвращаемого типа (можно указать тип void).

https://www.mql5.com/ru/docs/basis/types/classes

или так:

struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   uchar  slippage;     // значение допустимого проскальзывания
  };
//--- создали и проинициализировали переменную типа trade_settings
trade_settings my_set={0.0,0.0,5};  
if (input_TP>0) my_set.take=input_TP;
 
Taras Slobodyanik:

описание жеж есть:

Если честно, то я в документации и в описание половину не понимаю вовсе о чем речь. Поэтому я всегда разбираю всякие примеры на части и принтом вывожу каждое значение. А если еще в описание пример выдает ошибку, то такому описанию вовсе ноль ценности для меня.


 
Nauris Zukas:

Если честно, то я в документации и в описание половину не понимаю вовсе о чем речь. Поэтому я всегда разбираю всякие примеры на части и принтом вывожу каждое значение. А если еще в описание пример выдает ошибку, то такому описанию вовсе ноль ценности для меня.


Здесь условный оператор if находится в глобальном контексте, что запрещено. Операторы и команды могут находиться только в теле функций. За пределами функций могут находиться только объявления типов данных, переменных, макросов и констант.

 
Ihor Herasko:

Здесь условный оператор if находится в глобальном контексте, что запрещено. Операторы и команды могут находиться только в теле функций. За пределами функций могут находиться только объявления типов данных, переменных, макросов и констант.

Но согласитесь со мной, что пример в документации (что как раз предназначено для чайников как я) не должен быть с ошибками.