чего то не хватает - страница 3

 
Ololo:


Попробуйте на С - посмотрим на результат.

И снова аплодисменты.

Речь то была о mql4 была, тут никакой ошибки это не вызывает, зачем вы человеку начали что-то о С разъяснять. 

Vinin привел код, везде там 2, и все работает.


 


Не,  ну не уж то так туго доходит ? Если речь о МКЛ то причем массив типа чар ? И это Вам аплодисменты, поскольку у Вас постоянный выход за пределы массивов. Где Вы у Винин увидели обращение к элементу 2 ?

Вот код :

int start() 
{
  double t1=1;
  double t2=1;
  double myMap1[2];
  myMap1 [0]=t1; 
  myMap1 [1]=t2; 
  Alert (myMap1[0]);
  Alert (myMap1[1]);

  My_function(myMap1); 
  
  Alert (myMap1[0]);
  Alert (myMap1[1]);
  
  return(0); 
}


void My_function(double & myMap2[]) 
{
  double t3 =10; 
  double t4 =20; 
  myMap2 [0]=t3;   
  myMap2 [1]=t4;  
} 

А это вообще шедевр : 

Чтобы существовал элемент с номером 2 размерность массива должна быть не менее 3-х.

Относительно mql4 - полнейший бред. 
 

 Учите мат часть -  https://book.mql4.com/ru/variables/arrays  - это не спор: Вы основ не знаете. При описании указывается количество элементов и нумерация с 0. Что там спорить. Так, что то, что я указал (выделено синим) это верно, а бред - это то, что Вы пишете (выделено красным) и делаете, хоть пока и работает. Как появится проект более, чем с одним массивом и длиннее 20 строк увидите ;).

 

Господи, ну пошевелите ручками и сами обратитесь к элементу 2.

О массиве типа чар, вы слепой, я объяснил что привел пример когда работает ваша глупая фраза.

i nt start()
{
double t1=1;
double t2=1;
double myMap1[2];
myMap1 [0]=t1;
myMap1 [1]=t2;
myMap1 [2]=t1;
Alert (myMap1[0]);
Alert (myMap1[1]);

My_function(myMap1);

Alert (myMap1[0]);
Alert (myMap1[1]);

return(0);
}


void My_function(double & myMap2[])
{
double t3 =10;
double t4 =20;
myMap2 [0]=t3;
myMap2 [1]=t4;
myMap2 [2]=t3;
}

Что это, не рабочий код? Укажите ошибку, супер-программист 


 

 

это не спор: Вы основ не знаете. Что там спорить.

Насмешили. Язык полностью слизан с С++, С#. О чём тут можно не знать.

 
Ololo:

Господи, ну пошевелите ручками и сами обратитесь к элементу 2.

О массиве типа чар, вы слепой, я объяснил что привел пример когда работает ваша глупая фраза.

i nt start()
{
double t1=1;
double t2=1;
double myMap1[2];
myMap1 [0]=t1;
myMap1 [1]=t2;
myMap1 [2]=t1;
Alert (myMap1[0]);
Alert (myMap1[1]);

My_function(myMap1);

Alert (myMap1[0]);
Alert (myMap1[1]);

return(0);
}


void My_function(double & myMap2[])
{
double t3 =10;
double t4 =20;
myMap2 [0]=t3;
myMap2 [1]=t4;
myMap2 [2]=t3;
}

Что это, не рабочий код? Укажите ошибку, супер-программист 


 

Так это Вы "супер-программист", судя по всему :).

Ошибки:

1. Выход за пределы массива double myMap1[2];  myMap1 [2]=t1;

Массив описан как массив с двумя элементами, а обращение идет к третьему, память под который не отведена.

2. Отсутствие контроля размерности в функции   - void My_function(double & myMap2[]) - возможна запись за пределы выделенной памяти.

Обратитесь к учебнику, в конце-то концов.

 
Ololo:

это не спор: Вы основ не знаете. Что там спорить.

Насмешили. Язык полностью слизан с С++, С#. О чём тут можно не знать.


Так вот оказывается не знаете. Тока не с С++, а с С - Вы разницу понимаете ? Основной контроль на программисте, а не на компиляторе.
 

Так минутку, что опять за глупые теории опять.

Давайте предметно.

Код работает? Работает. Вот и всё. Какие  вопросы?

О выходе за пределы массива, я на С не программировал, и если относительно него это так, то тут я вижу совсем другую картину 

 

РАботает на Cpp, mql4. 

Вы возможно правы относительно языка С.

Но тут картину мы видим совсем другую, не знаю подо что мкл выделяет память, описание особо не читал т.к. он один в один с Срр, но масси[2]

имеет элементы 0,1 и 2. 

 
Ololo:

Так минутку, что опять за глупые теории опять.

Давайте предметно.

Код работает? Работает. Вот и всё. Какие  вопросы?

О выходе за пределы массива, я на С не программировал, и если относительно него это так, то тут я вижу совсем другую картину 


Не совсем верно: код пока работает. Так с этим и не спорю. Только это работает благодаря наличию собственного менеджера памяти в МКЛ -просто изначально отводится больше памяти, чем запрашивалось. Поэтому, кстати, не рекомендуется из длл менять адреса и размерности массивов. Проблемы будут в проектах, в которых больше одного массива, где будет использоваться поболее ресурсов. Самое главное - Вам не гарантировано сохранение значения по адресу myMap1 [2]=t1; и если этот участок уже занят другим массовом Вы измените значения этого массива. Компилятор при этом ошибок не выдает. Отладчика нет - ловить такие ошибки очень тяжело -остается только принт и журнал. Потому лучше сразу не допускать.

Удачи. 

 
Ololo:

РАботает на Cpp, mql4. 

Вы возможно правы относительно языка С.

Но тут картину мы видим совсем другую, не знаю подо что мкл выделяет память, описание особо не читал т.к. он один в один с Срр, но масси[2]

имеет элементы 0,1 и 2. 

Нет - только 0 и 1. Всего 2-а элемента. В С++ тоже, кстати.
 

Это все опять ваши теории, на практике все по другому.

я в Срр прогнал массив из 10 миллионов, и ничего, все равно никакой ошибки.

Нет - только 0 и 1.

Кхм. Ну а как жу код в котором все работает?

 

Вы видите рабочий код, и утверждаете что он не работает 

Причина обращения: