Arrray Bidirecionais de onde vem esses valores diferentes dos que eu inseri?

 

Bom dia pessoal, uma ajudinha do povo expert por gentileza :)

Testando aqui um array bidirecional no MQL5, fiz um script só pra teste e coloquei apenas essas linhas abaixo:

   int TempArray[22][36];
   TempArray[21][1]=10;
   TempArray[21][3]=11;
   TempArray[21][7]=12;
   TempArray[20][1]=20;
   TempArray[0][1]=30;
   TempArray[0][7]=32;
   ArrayPrint(TempArray);

Mas o danado após executar me retorna esse quadro abaixo. Dai vem a pergunta: De onde vem esses valores compridos que não fui eu que inseri? Exemplo, na posição [19][0] ele tem -2066310616, bem como em outras posições tem outros valores estranhos.  


 

Olá Ruy,


ArrayInitialize(TempArray,EMPTY_VALUE);

Será que inicializando o array funciona?

Teste depois nos conte.

 
Já vi em outras linguagens acontecer de ter lixo no array.
 
Ivan Ronchi:

Olá Ruy,


ArrayInitialize(TempArray,EMPTY_VALUE);

Será que inicializando o array funciona?

Teste depois nos conte.

Oi Ivan,

Coloquei, fiz essas 3 tentativas (somente com o ArrayFree; somente com o ArrayInitialize; e ambos), teve mudanças, mas olhe que desinteressante como ficou rsrs:

   int TempArray[22][36];
   ArrayFree(TempArray);
   ArrayInitialize(TempArray,EMPTY_VALUE);
   TempArray[21][1]=10;
   TempArray[21][3]=11;
   TempArray[21][7]=12;
   TempArray[20][1]=20;
   TempArray[0][1]=30;
   TempArray[0][7]=32;
   ArrayPrint(TempArray);

Muito doido! algo tá passando batido ai... E já li minunciosamente esse Artigo https://www.mql5.com/pt/articles/567 e não encontrei o que é.

 
Ruy Christian Hoffmann:

Oi Ivan,

Coloquei, fiz essas 3 tentativas (somente com o ArrayFree; somente com o ArrayInitialize; e ambos), teve mudanças, mas olhe que desinteressante como ficou rsrs:

Muito doido! algo tá passando batido ai... E já li minunciosamente esse Artigo https://www.mql5.com/pt/articles/567 e não encontrei o que é.

Ruy isso é normal,

Vc criou uma variável e não atribuiu valor, automaticamente o compilador atribuiu um valor.

Faça um teste besta e veja.

int x;
Print(x);

isso fara a impressão de um valor aleatório.


Em java te retorna um erro de inicialização de variável.

package teste;
public class HelloWorld {
    public static void main(String[] args) {
        int x;
        System.out.println(x);
    }
}

/*
Compilation Errors Detected

File: ../../../HelloWorld.java
Line: 7
variable x might not have been initialized
*/

Em C++ ele atribui 0.

#include <iostream>

int main()
{
    int x;
    std::cout << "Retorno:";
    std::cout << x;
}

/*
Retorno:0
*/
 
Ivan Ronchi:
Já vi em outras linguagens acontecer de ter lixo no array.

Ivan, deu certo assim:

ArrayInitialize(TempArray, 0);

Preencheu tudo com zero, pois realmente se tentar deixar em branco ele grava lixo de memória.

Obrigado :)


 
Jonathan Pereira:

Ruy isso é normal,

Vc criou uma variável e não atribuiu valor, automaticamente o compilador atribuiu um valor.

Faça um teste besta e veja.

isso fara a impressão de um valor aleatório.


Em java te retorna um erro de inicialização de variável.

Em C++ ele atribui 0.

Jonathannnnnnnnnnnnnnnnn :)

Pois eh meu amigo, esse "normal" ai quase me deixou doido a manhã toda kkkkk.

Fiz ela iniciar tudo com zero, já sei que não pode deixar slot empty em arrays do MQL5 pelo jeito rsrsrs.

 
Ruy Christian Hoffmann:

Jonathannnnnnnnnnnnnnnnn :)

Pois eh meu amigo, esse "normal" ai quase me deixou doido a manhã toda kkkkk.

Fiz ela iniciar tudo com zero, já sei que não pode deixar slot empty em arrays do MQL5 pelo jeito rsrsrs.

Não só em  arrays, qualquer tipo de dado.

Inclusive uma curiosidade....

se vc cria um enumerador e uma variável desse enumerador e não atribui nada, ele automaticamente pega o primeiro valor da enumeração.... :D

 
Ruy Christian Hoffmann:

Bom dia pessoal, uma ajudinha do povo expert por gentileza :)

Testando aqui um array bidirecional no MQL5, fiz um script só pra teste e coloquei apenas essas linhas abaixo:

Mas o danado após executar me retorna esse quadro abaixo. Dai vem a pergunta: De onde vem esses valores compridos que não fui eu que inseri? Exemplo, na posição [19][0] ele tem -2066310616, bem como em outras posições tem outros valores estranhos.  


Você precisa religiosamente tratar cada elemento de um array ou buffer... Ou você vai se f*...

Do contrário, ele atribui o valor EMPTY_VALUE aos elementos, que NÃO é Zero... É EMPTY_VALUE mesmo...

O MQL5 é uma linguagem com várias arestas e bizarrices, essa é uma delas... Não sei se é o seu caso aí, pois depende de como e onde o vetor foi criado, e onde ele é processado, às vezes ele põe sujeira de memória mesmo, coisa que não deveria ocorrer em uma linguagem da Alto Nível como o MQL5, linguagem herdada, - e, poderia ser mais caprichada, já que o objetivo é operar o mercado finenceiro e não desenvolver interfaces na NASA - do C++...

Quer uma bizarrice a mais?  Tente dar um ArraySize() em um vetor bi-dimensional...

É por essas e outras que a plataforma não evolui em número de usuários programadores como deveria...

;)

Razão: