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

 
Alexey Navoykov:

Если я правильно помню объяснения, резервный размер не уменьшится даже если ему явно указать меньшее число.

Неправильно. Судя про примеру из справки, 0 работает действительно как 0 и тогда предложение про -1 очень даже логично.

 
Кстати, я не совсем корректно рассуждал насчёт reserve_size. Ведь по сути это просто шаг изменения резерва, но не сам резерв.  Т.е. он скорее всего нигде не хранится.  А вот общий размер выделенной памяти известен.  Вот его бы нам хотелось как-то знать, а в идеале управлять им непосредственно.

А предложение про ArrayResize я переформулирую так:  нужно чтобы при задании reserve_size=-1 функция не меняла выделенный размер памяти под массив, если параметр size лежит в пределах этого диапазона.   Если же size > capacity, то само собой буфер увеличится.
 
В массиве ("внутри") хранится 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);
  }
 
Ilyas:
В массиве ("внутри") хранится allocated - под сколько элементов массив распределён.

Логика работы с резервом(условный код):

Ясно, спасибо.  А в самом начале этот allocated равен -1, или нет?  Т.е. при первоначальном вызове ArrayResize(arr, 0, 100) аллокация будет?  

 
Alexey Navoykov:

А в самом начале этот allocated равен -1, или нет?

Равен 0
Alexey Navoykov:

Т.е. при первоначальном вызове ArrayResize(arr, 0, 100) аллокация будет?  

Аллокация происходит, только если размер массива меняется в большую сторону. В данном случае, размер массива не меняется, т.к. он был равен 0

 
FVitalii Ananev:
Разница в том, что в первом случае ошибки нет :)
А в С\С++ почему в обоих случаях ошибки нет? (Ответ на вопрос при чем здесь С\С++ см. выше)
 
Как удалить URL из списка разрешённых адресов? В хелпе написано: "To delete an address from the trusted list, select it and press "Delete" button", но там нет этой кнопки.
 
Sergei Vladimirov:
Как удалить URL из списка разрешённых адресов? В хелпе написано: "To delete an address from the trusted list, select it and press "Delete" button", но там нет этой кнопки.
на клавиатуре.
 
Тьфу ты. Спасибо.
 

Ошибка при выполнении 

//Script1.mq5
typedef void (*fn)();
#import "Script2.ex5"
        void g( fn );
#import
void ff() { Print( __FUNCTION__ ); }
void OnStart() { g( ff ); }
//Script2.mq5
#property library
typedef void (*fn)();
void g( fn f ) export { f(); }
Результат: Script1 (EURUSD,M15) invalid function pointer call in 'Script2.mq5' 

Первоначально (до упрощения) ошибка воспроизводилась как: pure virtual function call... и далее ссылка на ff()... - значит была попытка вызвать какую-то функцию