Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Mostrami un esempio in modo che non ci sia confusione, poi ti risponderò.
Un esempio è semplice. Supponiamo che 15 "cicli di computer" siano spesi per l'inizializzazione automatica del membro a1.strA. Sono giunto alla conclusione preliminare che 15 cicli sono spesi per inizializzare anche il membro b1.strB. È corretto?
Nella classe CExpert della libreria standard, ci sono queste dichiarazioni protette
Allo stesso tempo, il costruttore di questo oggetto contiene le seguenti stringhe
Ho provato a creare qualcosa di simile nella mia classe, ma senza ulteriori inizializzazioni (come Init e InitXXX).
Il compilatore ha compilato tutto senza avvertimenti o errori, ma ha avuto un errore critico 281 (Invalid pointer access) e EA è stato cancellato dal grafico.
A questo proposito, ho alcune domande:
1. Cosa dovrei fare nel costruttore (specificare NULL o specificare il puntatore all'oggetto specifico)?
2. L'inizializzazione del puntatore di tipo InitTrade è obbligatoria?
Nella classe CExpert della libreria standard, ci sono queste dichiarazioni protette
Allo stesso tempo, il costruttore di questo oggetto contiene le seguenti stringhe
Ho provato a creare qualcosa di simile nella mia classe, ma senza ulteriori inizializzazioni (come Init e InitXXX).
Il compilatore ha compilato tutto senza avvertimenti o errori, ma quando ho provato a installare l'EA sul grafico, ha ottenuto un errore critico 281 (Invalid pointer access) e l'EA è stato cancellato dal grafico.
A questo proposito, ho alcune domande:
1. Cosa dovrei fare nel costruttore (specificare NULL o specificare il puntatore all'oggetto specifico)?
2. L'inizializzazione del puntatore di tipo InitTrade è obbligatoria?
1. Entrambi sono corretti. Tutto dipende dalla particolare implementazione della classe (non specificamente CExpert). Tuttavia, è meglio creare oggetti dinamici nel metodo InitXXX, che restituisce bool (perché il costruttore non restituisce il risultato dell'esecuzione e dovrete resettare il flag di inizializzazione e poi analizzarlo (il flag).
2. Certo che lo è. Altrimenti, si verificherà l'errore critico 281 (Invalid pointer access).
PS. Grazie a proposito. Dovrò inserire dei controlli dei puntatori prima dell'uso.
Un esempio è semplice. Supponiamo che 15 "cicli di computer" siano spesi per l'inizializzazione automatica del membro a1.strA. Sono giunto alla conclusione preliminare che 15 cicli sono spesi per inizializzare anche il membro b1.strB. È corretto?
No, non si tratta affatto dell'orologio. Beh, o non proprio dell'orologio.
OK, allora una domanda molto semplice: quale è più veloce da inizializzare in tempo, il membro a1.strA o il membro b1.strB dell'esempio precedente?
O cosa leggere "punto per punto"? Fisicamente, non c'è modo di imparare la programmazione a livello di "macchina-processore".
OK, allora una domanda molto semplice: quale è più veloce da inizializzare in tempo, il membro a1.strA o il membro b1.strB dell'esempio precedente?
O cosa leggere "punto per punto"? Non c'è fisicamente un modo per imparare la programmazione a livello di "macchina-processore".
a1.strA si inizializzerà più velocemente perché il suo processo di inizializzazione sta semplicemente azzerando sul posto. Per b1.strB verrà fatta un'allocazione di memoria.
Tuttavia, questa differenza è abbastanza difficile da misurare, poiché è molto meno dell'uno per cento, tenendo conto del codice intorno all'inizializzazione
che inizializza più velocemente
Per b1.strB verrà fatta un'allocazione di memoria.
Ecco, grazie - l'anello mancante nella mia logica.
TheXpert, grazie per l'aiuto. Ho cercato di spiegare il punto con parole mie. Sono d'accordo che una domanda veramente corretta è posta da coloro che sono nel sapere. Ma di solito non fanno domande del mio livello :)
1. È corretto in entrambi i modi. Tutto dipende dall'implementazione specifica della classe (non specificamente CExpert). Tuttavia, è meglio creare oggetti dinamici nel metodo InitXXX, che restituisce bool (perché il costruttore non restituisce il risultato dell'esecuzione e dovremo reimpostare/disabilitare il flag di inizializzazione e poi analizzarlo (il flag).
2. Certo che lo fa. Altrimenti errore critico 281 (accesso al puntatore non valido).
PS. Grazie a proposito. Dovrò inserire dei controlli dei puntatori prima dell'uso.
Grazie, ora tutto è al suo posto. Tuttavia, c'è un'altra domanda: supponiamo che si verifichi l'errore 281, ma è meglio che l'Expert Advisor non venga scaricato. Cosa devo fare?
Permettetemi di chiarire la mia domanda - Cosa fare se l'errore 281 si verifica dopo tutti i passaggi di inizializzazione, ma non influenzerebbe il lavoro principale di Expert Advisor in modo abbastanza critico da non farlo funzionare affatto?
Supponiamo che si verifichi l'errore 281, ma è auspicabile che l'EA non venga scaricato. Cosa dovremmo fare allora?
Permettetemi di chiarire la mia domanda: cosa fare se l'errore 281 si verifica dopo tutti i passi di inizializzazione, ma non influenzerà il lavoro principale dell'Expert Advisor in modo abbastanza critico da non farlo funzionare affatto?
"Invalid pointer access" =="Attempting to access an invalid pointer"? Se sì, allora
Un tentativo di accedere a un puntatore non valido causa un crash del programma. Ecco perché è necessario usare la funzione CheckPointer() prima di usare un puntatore. Un puntatore può essere non valido nei seguenti casi