| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Программа магически вылетает при вызове функции |
| Автор: KasMP 9.12.2008, 21:13 | ||||||
| Здравствуйте! Пишу программу для сложения и умножения очень длинных целых чисел (>20 разрядов) с помощью строк. Сложение работает отлично, поэтому от функции сложения оставлю только заголовок. Умножение выполняется с помощью функции сложения (подробно описано в комментариях). Отмечу только, что
Надеюсь, вы поможете мне узнать, что такого особенного в моей функции умножения (пока незавершенной)...
|
| Автор: J0ker 9.12.2008, 21:33 |
| дебагеры уже не в почете? |
| Автор: KasMP 9.12.2008, 21:38 | ||
В почете, но при компиляции (Dev-C++) нет ни одной ошибки, ни одного предупреждения:
А отладкой у меня не получается пользоваться - переменные не заносятся в наблюдаемые... Добавлено через 12 минут и 17 секунд Возможно, остальной код тоже имеет значение В главной функции ничего особенного нет: ввод строк, определение более длинной, создание массива для произведений s2[i]*s1, вызовы функций. Функция (точнее, процедура) сложения в итоге формирует переменную res (а она глобальная), поле чего res выводится уже в главной функции. Не знаю, где может быть загвоздка |
| Автор: KasMP 9.12.2008, 21:58 | ||||||
Сложение:
(обещаю выравнивание столбцов вынести в отдельную процедуру, а не повторять каждый раз один и тот же код Глобальные переменные:
Главная функция:
(тоже можно оптимизировать... но это потом) Функции как функции, ничего сверхъестественного... За выделенную область памяти вроде не вылезаю |
| Автор: KasMP 9.12.2008, 22:38 |
А в Microsoft Visual C++ 2008 Expess version ? Добавлено через 2 минуты и 4 секунды это как? да я не только верю, я знаю это научил бы кто, как это делать |
| Автор: J0ker 9.12.2008, 23:16 |
ну если там интерфейс тот-же как и в профешенел, то выбрать дебаг билд в тулбаре Добавлено через 46 секунд точки останова ставите просто слева от строки кода на полях кликнуть - появится метка |
| Автор: KasMP 10.12.2008, 00:33 | ||||||||||
Понятно К строчке
такие ошибки (честно говоря, я не понимаю причин ни одной из них):
Добавлено через 2 минуты и 12 секунд Точно такие же ошибки везде, где объявляются массивы символов... В сумме 18 штук |
| Автор: KasMP 10.12.2008, 01:29 |
| Так, с объявлением массивов в Visual C++ (точнее, с тем, что такое объявление не поддерживается |
| Автор: sergejzr 10.12.2008, 01:39 | ||
Ты путаешь момент компиляции и момент исполнения программы. Откуда компилятору знать, какое значение будет у len1 в процессе выполнения программы? Если нужна динамика, используй указатель.
Если мне память в С не изменяет. |
| Автор: KasMP 10.12.2008, 01:54 | ||||
Спасибо, с этим я уже разобралась Основная проблема в том, что при вызове
|
| Автор: J0ker 10.12.2008, 06:27 | ||||
это соответствует стандарту C++ другие компиляторы могут поддерживать стандарт C99 - там разрешены массивы с динамическим размером - но это стандарт plain C
массивы нулевого размера по стандарту запрещены |
| Автор: sergejzr 10.12.2008, 08:24 |
| KasMP, просто используй указатели. |
| Автор: mes 10.12.2008, 14:26 |
| a почему бы не использовать std::string ? или другой подходящий контейнер , чем мучаться с выделениями памяти ? |
| Автор: KasMP 10.12.2008, 17:13 |
| Спасибо Посмотрим, будет ли прога вылетать при вызове функции умножения... |
| Автор: KasMP 11.12.2008, 19:09 | ||
| Я нашла ошибку Любая адекватная программа, операционная система или человек не задумываясь отклонит того, кто пытается захватить все-все-все себе...
Надо же такое написать Ограничила по одному параметру, итерацию сделала по другому, приписала замечательный комментарий и поражаюсь, что же это оно вылетает |