Errori, bug, domande - pagina 593

 

Ho deciso di guardare uno dei miei vecchi sviluppi e... Potete dirmi cosa significa questo errore?

---

L'inizializzazione dell'Expert Advisor è riuscita. Quando cerco di aprire il pannello informativo, ottengo una sorpresa. Dove cercare la ragione? ))

 
tol64:

Ho deciso di guardare uno dei miei vecchi sviluppi e... Potete dirmi cosa significa questo errore?

---

L'inizializzazione dell'Expert Advisor è riuscita. Quando cerco di aprire il pannello informativo, ottengo una sorpresa. Dove cercare la ragione? ))

Dobbiamo localizzare il problema. Ero in una situazione simile, mettere Prints e guardare dove vola fuori. E poi o servicedesk o sul forum. O forse troverete voi stessi l'errore.
 
Valmars:
Dobbiamo localizzare il problema. In una situazione simile, metto Prints e guardo dove vola fuori. E poi o a servicedesk o sul forum. O forse troverete voi stessi l'errore.

Dovrò stampare dove non ho dopato. )) Gli sviluppatori non riescono a capire da questo codice immagine da dove crescono le gambe? Abbiamo bisogno di un indizio. Anche se lì si genera sempre un nuovo codice. Ecco un altro esempio:

 
tol64:

Dovremo stampare dove non è stato stampato. )) Gli sviluppatori non riescono a capire da questo codice immagine da dove crescono le gambe? Abbiamo bisogno di un indizio. Anche se lì si genera sempre un nuovo codice. Ecco un altro esempio:

Gli sviluppatori chiederanno in ogni caso di localizzare tutto, creare un'applicazione nella SD, allegare un esperto e descrivere tutto nel modo più dettagliato possibile.

Ecco perché sono sviluppatori (li conoscete) e i telepati si riposano oggi. :)

 
Dopo aver copiato un array dinamico some_ array_1 dichiarato come some_ array_1[], a cui non è stata assegnata memoria, in un array dinamico some_ array_2[], a cui è stata assegnata memoria usando ArrayResize(some_ array_2, some_ array_2_quantity), l'operatore ArrayCopy(some_ array_1, some_ array_2) scopre che il numero di elementi in some_ array_1 non è 0, ma some_ array_2_quantity. Questo è un errore grave perché l'array some_ array_1[] non è allocato in memoria. Per favore correggetelo in modo che la dimensione dell'array in questa situazione non cambi da sola e il compilatore generi un errore.
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Interesting:
Agli sviluppatori.

Dopo essere passato alla nuova build (555), il terminale ha smesso di salvare la posizione (stato di attività corretto) per "Strumenti", "Market Watch", "Tester" e"Finestra dati".

Dopo che il terminale è stato chiuso e riaperto (non minimizzato, ma chiuso) tutto ciò che è al di fuori del modulo principale scompare. Da quanto ho capito, il terminale pensa per qualche motivo che il commerciante abbia fatto a meno di queste cose. Devo andare nel menu e riattivare tutto (la cosa buona è che almeno la posizione è ricordata).

Il "Navigator" si trova, come sempre, insieme ai grafici nella finestra principale del modulo, va bene.

Il sistema operativo è Win XP32, Bild 555, ho due monitor. Su una finestra principale (su cui navigatore e grafici), e sulla seconda tutti i suddetti ("Strumenti", "Market Watch", "Tester" e "Finestra dati").

PS

Non posso dire di x64 e di altri sistemi operativi, non ho la possibilità di controllarlo su due monitor.

Stesso schifo su 7 su un monitor. Reinstallarlo ha aiutato. Anche il terminale confonde le cartelle in Roaming per diversi terminali dopo la reinstallazione.
 
-Alexey-:
Dopo aver copiato un array dinamico some_ array_1 dichiarato come some_ array_1[], a cui non è stata assegnata memoria, in un array dinamico some_ array_2[], a cui è stata assegnata memoria con ArrayResize(some_ array_2, some_ array_2_quantity), con operatore ArrayCopy(some_ array_1, some_ array_2) risulta che il numero di elementi in some_ array_1 non è 0, ma some_ array_2_quantity. Questo è un errore grave perché l'array some_ array_1[] non è allocato in memoria. Per favore correggetelo in modo che la dimensione dell'array non cambi da sola in questa situazione e il compilatore generi un errore.

Non c'è nessun errore, la funzione ArrayCopy alloca da sola la memoria dell'array dinamico alla dimensione dei dati da copiare.

Questo non è un bug, ma una caratteristica.

 
Urain:

Non c'è nessun bug, la funzione ArrayCopy alloca la memoria dell'array dinamico del ricevitore da sola.

Questo non è un bug, ma una caratteristica.

A causa di questa caratteristica, si possono facilmente fare errori algoritmici per caso o perché l'algoritmo è difettoso. E poi non lo troverai mai e non saprai mai quando c'è un errore. Ho trovato un errore solo quando ho tradotto un programma in C++, perché lì il compilatore è un assistente che rileva gli errori. Quindi penso che sia più un bug che una caratteristica. IMHO!
 
-Alexey-:
A causa di questa caratteristica, è facile fare errori algoritmici - sia per sbaglio che perché l'algoritmo è difettoso. E poi non si può mai trovare e non si può mai sapere che ci sono errori. Ho trovato un errore solo quando ho tradotto un programma in C++, perché lì il compilatore è un assistente che rileva gli errori. Quindi penso che sia più un bug che una caratteristica. IMHO!
ArrayCopy non è l'unica funzione che alloca la memoria, tutte le funzioni Copy si occupano degli array stessi, quindi fate attenzione e leggete il manuale.
 

Come è possibile che TimeCurrent() sia inferiore all'ultimo valore della serie temporale?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   Print("time[rates_total-1] = ",time[rates_total-1]); 
   Print("TimeCurrent()         = ",TimeCurrent());  

   return(rates_total);
  }
TimeCurrent()         = 2011.12.09 18:47:29
time[rates_total-1]  = 2011.12.09 23:00:00
Motivazione: