- Погрешность!
- [Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей
- Ошибки, баги, вопросы
и все же,
когда такое выпадает ?
и все же,
когда такое выпадает ?
При чтении элемента массива строковых переменных, который не был ранее инициализирован.
когда вы производите операции со строкой, которая не была инициализирована. По-моему само название ошибки говорит за себя.
вот код для проверки, при создании более 2 глобалЬных перемен вылезает ERROR 4008
string name, txt; double val; int err; //-- GetLastError(); //-- for(int i=0; i<GlobalVariablesTotal(); i++) { name = GlobalVariableName(i); val = GlobalVariableGet(name); err=GetLastError(); if(err!=0) { Alert("ERROR! ",err, " name=",name); //continue; } txt=txt+i+" "+name+" = "+val+"\n"; } Comment(txt);
Константа | Значение | Описание |
---|---|---|
NULL | 0 | Указывает пустое состояние строки |
Но при этом NULL не является строковым типом, следовательно обратившись к строке, или чаще элемент строкового массива которая (который(которые)) предварительно не проинициализированны
Любым строковым значением, например "". Вы получаете 4008 ошибку. Выход: ВСЕГДА ИНИЦИАЛИЗИРОВАТЬ ПЕРЕМЕННЫЕ ПРИ ОБЪЯВЛЕНИИ и не полагаться на препроцесор.
Подобные коллизии замечены даже переменных типа int - если ее объявить без инициализации, а потом использовать например в функциях инкремента \ декремента, то на выходе
вы рискуете получить мусор. (особенно часто это проявляется с локальными переменными объявленными в пользовательских функциях ( чаще объявленными в заголовке функции)).
В вашем варианте вот такая конструкция была бы более правильной :
for(int i=GlobalVariablesTotal(); i>=0; i--) {string name = ""; name = GlobalVariableName(i); или for(int i=GlobalVariablesTotal(); i>=0; i--) { string name = GlobalVariableName(i);
Мдя, не зря Билли грозился принять на работу любого, прочитавшего Кнутта :)
faq, извините, но Ваш код компилятор не пропустит.
Хотя - он ведь и не компилятор вовсе :) Насчет коллизии согласен, но суть, imho,- в БОЛЬШОЙ путанице, допущенной при формировании и реализации правил неявного преобразования типов данных.
вот код для проверки, при создании более 2 глобалЬных перемен вылезает ERROR 4008
инициализируйте txt до цикла, и симптомы пройдут.
И где же скажите компилятор на моем коде запнется ?
Не поставил минус 1 за Объектс тотал - извините забыл, это как то ...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования