Ошибки, баги, вопросы - страница 2263

 
fxsaber:

Есть масса способов связи, но не для Маркета.

SSD нужно использовать, чтобы не гробить HDD. Там файл не имеет конкретного места в физической памяти и всегда "гуляет" при перезаписи и дозаписи. 
Сейчас уже то время, когда HDD нужно использовать только для банка данных, но категорически не для системных дисков. 

 
Nikolai Semko:

SSD нужно использовать, чтобы не гробить HDD. Там файл не имеет конкретного места в физической памяти и всегда "гуляет" при перезаписи и дозаписи. 
Сейчас уже то время, когда HDD нужно использовать только для банка данных, но категорически не для системных дисков. 

Копировщики ставят на VPS. Почти все VPS - HDD.

 
fxsaber:

Копировщики ставят на VPS. Почти все VPS - HDD.

Ну тогда это проблема для хозяев vps.
 
fxsaber:

Есть масса способов связи, но не для Маркета.

можно и memmap пропихнуть если через кастинг и union

 
Konstantin:

можно и memmap пропихнуть если через кастинг и union

Маркет без DLL.

 
Если делаю
ArrayResize(Array, Size, 100);

То количество выделяемой памяти будет кратно сотне?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Ilyas, 2016.08.24 11:08

В массиве ("внутри") хранится allocated - под сколько элементов массив распределён.

Логика работы с резервом(условный код):
ArrayResize(arr,int size,int reserve)
  {
   if(arr.allocated<size)
      if(!ArrayAllocateMemory(arr,size+reserve))  // -> arr.allocated=size+reserve;
         return(-1);
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return(size);
  }
Выше ответ - нет.
 

Прошу помощи, так и не смог разобраться в причинах.


Вот такой код по непонятной мне причине компилируется

class A {};

class B : public A
{
public:
  void f()
  {
    Print(__FUNCTION__);
  }
};

void OnStart()
{
  A a;
  
  ((B*)(&a)).f(); // OK
}

но падает при выполнении. Подумал, ну баг при компиляции - не беда.


Но потом пишу вот так

#property script_show_inputs

input string FileName = "Alpari_GBPAUD.ZIP";

#include <Zip\Zip.mqh> // https://www.mql5.com/ru/articles/1971

void OnStart()
{
  CZip Zip;

  Zip.LoadZipFromFile(FileName, 0);

  uchar Bytes[];

  ((CZipFile*)Zip.ElementAt(0)).GetUnpackFile(Bytes);
  Print("UnZip - unpack size " + (string)ArraySize(Bytes) + " bytes.");  
}


Мало того, что это компилируется, так это еще и успешно выполняется! Скорее всего, где-то туплю сильно, но так и не смог понять, почему это пашет без проблем.

К сожалению, локализовать у меня не получилось, поэтому пример с ZIP-библой. И, скорее всего, разбираться будет в лом. Но мало ли.

 

Вылетает терминал (1881) при дебаге, если переменная представлена в двоичном формате

Проиграйте гифку, чтобы увидеть

Возможно, это относится только к union переменным

 
Nikolai Semko:

Вылетает терминал (1881) при дебаге, если переменная представлена в двоичном формате

Проиграйте гифку, чтобы увидеть

Возможно, это относится только к union переменным

Спасибо за сообщение.

Исправил.
Исправление войдёт в следующий билд.

 
fxsaber:

Прошу помощи, так и не смог разобраться в причинах.


Вот такой код по непонятной мне причине компилируется

но падает при выполнении. Подумал, ну баг при компиляции - не беда.

...

Вы пытаетесь указатель на объект типа А привести к указателю на объект типа B, что является явной ошибкой, т.к. A не наследуется от B