Че за глюк со строковым массивом?

 

когда выходим за границы строкового массива возникает непонятный глюк.


//объявляем строковый массив размером 5

string test1[5];
//присваиваем индексу 5 значение ТЕСТ
test1[5] = "ТЕСТ";


далее при чтении массива в цикле от нуля до тысячи, скажем, при i от 0 до 5 будет значение 5, которое собственно никто и не присвоял, а от 5 до тысячи будет значение "ТЕСТ".

Полнейший глюк. Этот глюк можно и не заметить, так как если предварительно присвоить значения всем предыдущим, то они не испортятся...


На закономерный вопрос зачем выходить за границы массива, сразу скажу, что я так попробовал выяснить что же на самом деле показывает размерность массива, считается от нуля или от единицы. В справке я этого не нашел, поэтому попробовал работает ли присвоение с индексом равным размерности массива, и поспешил сделать вывод что раз работает значит размерность считается от нуля. Типа ноль это одна ячейка. А когда нужно было перелить из строкового массива в числовой столкнулся с необъяснимым глюком, никак последнее значение не копируется...

На целочисленные массивы этот глюк не распространяется....


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


 

Это не с массивом "глюк". Тут все серьезней и требуется помощь специалиста. Самолечением я бы вам не рекомендовал заниматься.

===

М-да... В справке вы не нашли. Вы что, под фонарем искали? Или типа "не читатель, а писатель"?.. в форумы. Там прям в самом начале, где о массивах (Операции с массивами).

Впрочем, этот ваш пост будет полезен для тех, у кого аналогичная дисфункция восприятия. Не расстраивайтесь! Вон, у Том Круза дисфункция с письмом, у вас - противоположная ситуация - с чтением. И ничего - жить с этим можно.

 

Ну да. Набираем в гугле:

массивы site:docs.mql4.com

и попадаем в [Операции с массивами].

.

А глюк в натуре прикольный ;-)

 
Н да... надо в доке сделать возможность добавлять комменты, если некоторые доку не читают, так может хоть в коментах прочтут.....
 
xrust >>:
Н да... надо в доке сделать возможность добавлять комменты, если некоторые доку не читают, так может хоть в коментах прочтут.....

боюсь, комменты и найти не смогут..

 
В справке есть раздел Операции с массивами. Там все и написано насчет индексации элементов.
 
vit46 >>:


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


Спасибо что просветили, а у кого этот глюк происходит они еще одну тему заведут.

 
SofTAA писал(а) >>

Спасибо что просветили, а у кого этот глюк происходит они еще одну тему заведут.

А они все равно заведут новую тему.

 
Vinin >>:

А они все равно заведут новую тему.


В этом даже сомневаться не приходится, для таких индивидумов нужно чтобы на этапе компиляции выдавалось сообщение о выходе за границы массива. Или чтобы пока раздел документация не прочитаешь редактор не запускался))). В случае с метаэдитором это будет не сложно в конце концов не мсдн прочитать))))
 

Да ладно, чего уж там, сам через раз на подобные штуки натыкаюсь. Выход за пределы массива - обычная ошибка даже у довольно опытных. Например, не поставил в цикле ArrayResize() - вот тебе и выход за пределы массива. Просто я из-за таких мелочей не завожу ветку, вот и все.

Компилятор вряд ли когда-нибудь станет настолько умным, чтобы правильно интерпретировать ошибки исполнения.

 
Mathemat >>:

{...} Компилятор вряд ли когда-нибудь станет настолько умным, чтобы правильно интерпретировать ошибки исполнения.

STL в С++ с проблемой контроля выхода за границы массива

справляется /метод at() бросает исключение/. Но именно что в Runtime.

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