CXX0030: Error: expression cannot be evaluated
От: romaf91  
Дата: 26.09.12 03:08
Оценка:
Добрый вечер!

я новичок в программировании, подскажите что за ошибка и как ее исправить.
компилирую код, он компилится, но выдает ошибку через пошаговый дебагинг.
visual studio 2005

код прикреплен
http://files.rsdn.ru/102121/include.doc

26.09.12 20:46: Перенесено из 'C/C++'
26.09.12 20:46: Перенесено из 'C/C++'
c++ error
Re: CXX0030: Error: expression cannot be evaluated
От: MasterZiv СССР  
Дата: 26.09.12 07:08
Оценка:
> я новичок в программировании, подскажите что за ошибка и как ее исправить.
> компилирую код, он компилится, но выдает ошибку через пошаговый дебагинг.

> CXX0030: Error: expression cannot be evaluated

-- это ошибка ? Это видимо ошибка всё-таки компилятора.
Разберись уж.

Ну и какой смысл выделять динамически массивы по фиксированному в compile time
размеру ? Хип тренируем ?
Posted via RSDN NNTP Server 2.1 beta
Re: CXX0030: Error: expression cannot be evaluated
От: Кодт Россия  
Дата: 26.09.12 16:46
Оценка:
Здравствуйте, romaf91, Вы писали:

R>код прикреплен

R>http://files.rsdn.ru/102121/include.doc

Не надо так больше делать. Формат вордового документа не для того предназначен.
Уж на то пошло, можно было сохранить и прикрепить непосредственно .cpp
А вообще, открой для себя онлайн-средства наподобие pastebin.com или компиляторы codepad.org, liveworkspace.org, ideone.org

Твой пример на кодепаде: http://codepad.org/sz8xEBVV
выдаёт сегфолт (расстрел памяти) на 28 шаге.
Перекуём баги на фичи!
Re[2]: CXX0030: Error: expression cannot be evaluated
От: Кодт Россия  
Дата: 26.09.12 17:57
Оценка: 1 (1)
Здравствуйте, Кодт, Вы писали:

К>Твой пример на кодепаде: http://codepad.org/sz8xEBVV

К>выдаёт сегфолт (расстрел памяти) на 28 шаге.

Очевидный косяк: for(i=0; i<=n; ++i).
В С/С++ принято использовать полуинтервалы — т.е. a[n] содержит элементы a[0], a[1], ..., a[n-1].
При i=n происходит вылет за границу массива.

Я добавил отладочный вывод (значения индексов i и j) — http://codepad.org/ni6fysTP
И вот что получил
<.....>

START!!!
i=0, j=4
sdg=0.011244
i=1, j=4
sdg=0.0123149
i=2, j=4
sdg=0.0123691
i=3, j=-1483517220

Segmentation fault

То есть, на последнем этапе (j=4, i=2) мы умудрились выскочить за границу массива Ht и выстрелить в находящуюся по соседству переменную j.
После чего попытались обратиться к Ht[j] с этим бешеным отрицательным значением.

Разбираться в алгоритме не хочу, — так что более содержательную помощь пока оказать не готов.
Перекуём баги на фичи!
Re[3]: CXX0030: Error: expression cannot be evaluated
От: romaf91  
Дата: 26.09.12 18:15
Оценка:
Здравствуйте, Кодт, Вы писали:

оверквотинг удалён — Кодт

Спасибо большое теперь более менее понятно что фиксать)
Re[3]: CXX0030: Error: expression cannot be evaluated
От: romaf91  
Дата: 27.09.12 02:42
Оценка:
Здравствуйте, Кодт, Вы писали:

оверквотинг удалён — Кодт

в общем исправил границы массива
скомпилировал код который Вы мне присылали. НО! мой компилятор не показывает это гигантское отрицательное значение J
есть ли какие-нибудь догадки почему просиходит приравнивание J к такому числу ?
Re[4]: CXX0030: Error: expression cannot be evaluated
От: romaf91  
Дата: 27.09.12 03:55
Оценка: :)
Здравствуйте, romaf91, Вы писали:

оверквотинг удалён — Кодт

double Ht[n][N]; — вот здесь ошибка в самом начале, неверный размер массива, исправил , вроде работает. можете проверить ?
Re[4]: CXX0030: Error: expression cannot be evaluated
От: Кодт Россия  
Дата: 27.09.12 12:34
Оценка:
Здравствуйте, romaf91, Вы писали:

R>в общем исправил границы массива

R>скомпилировал код который Вы мне присылали. НО! мой компилятор не показывает это гигантское отрицательное значение J
R>есть ли какие-нибудь догадки почему просиходит приравнивание J к такому числу ?

Потому что это мусор. Есть такой принцип "GIGO" — garbage in garbage out.
Мы сначала прочитали что-то за пределами массива (инициализированное как попало — то ли нулём, то ли ещё чем-то), повычисляли что-то с этим мусором, и потом записали мусор в J.
В зависимости от настроек компилятора и загрузчика там могло быть и 0, и 0xCDCDCDCD, и 0xDEADBEEF, и просто неочищенная от предыдущей работы память.
Опять же, в зависимости от настроек, компилятор мог чуть-чуть по-разному расположить переменные в памяти. Соответственно, выстрел происходил в разные переменные, с разной степенью фатальности.
Перекуём баги на фичи!
Re[5]: CXX0030: Error: expression cannot be evaluated
От: Кодт Россия  
Дата: 27.09.12 12:35
Оценка:
Здравствуйте, romaf91, Вы писали:

R>double Ht[n][N]; — вот здесь ошибка в самом начале, неверный размер массива, исправил , вроде работает. можете проверить ?


Ссылку на codepad или ideone можно?
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.