![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 19.04.2008
Сообщений: 22
|
![]()
Помогите пожайлуста студенту првого курса уже больше недели никак не могу решить эту задачу из-за одной ошибки!
Задача: пользователь вводит через диалог фамилию, имя и гол рождения студента. Программа расчитывает возраст студента и записывает его в список, так, чтобы его можно было просмотреть. В программе есть необходимые комментарии, думаю разберетесь! Ошибка: в режиме Debug, после ввода информации в диалог и нажатия кнопки OK программа вылетает и возникает ошибка, где проверяется уловие studBeg.godRojd: if(studBeg.godRojd) let = (newtime.tm_year + 1900) - studBeg.godRojd; //(текущий г. + 1990 г.) - г. рождения студента Сама ошибка: Unhandled exception at 0x0041162e in martirosyna_5_Nishna.exe: 0xC0000005: Access violation reading location 0x00200084. Изивните, но мне не удалось выложить этот проект на форуме, так что я его выложил на depositfiles: http://depositfiles.com/files/4839704 P. S.: заранее всем благодарен! |
![]() |
![]() |
![]() |
#2 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 19.04.2008
Сообщений: 22
|
![]() Цитата:
#include "stdafx.h" #include "martirosyna_5_Nishna.h" void Clear(Union& u) //функция в строке u.str по адресам NF - 1 и NF + NI - 1 вставляет символ '|' { int len = sizeof(u.str)/sizeof(char); for (int i = 0; i < len; i++) if (i == NF - 1 || i == NF + NI - 1) u.str[i] = '|'; else u.str[i] = ' '; } Union obrabotkaInfo(const StudBeg& studBeg) //функция получает фамилию, имя и год рождения студента через studBeg //и записывает в StudEnd фамилию, имя и его возраст { Union u; Clear(u); //получить текущую дату - текущий год newtime.tm_year + 1900 //смотрите в Help пример применения функции _localtime64_s char buf[26]; time_t ltime; //ltime может хранит системную дату time( <ime ); //Запись системного времени в ltime errno_t err = ctime_s( buf, 26, <ime ); //Преобразовывает значение времени в строку и прикрепляет к локальным //настройкам временной зоны //struct tm tm newtime; //структура, содержащая единицы времени и их значение(секунды, минуты, часы...) _localtime64_s( &newtime, <ime ); //Преобразовывает значение времени и корректирует для данного часого пояса //Записывает данное время из ltime в newtime int let = 0; //возраст студента //вычисление возраста относительно текущего года if(studBeg.godRojd) let = (newtime.tm_year + 1900) - studBeg.godRojd; //(текущий г. + 1990 г.) - г. рождения студента //запись информации о студенте в новом виде TCHAR bufLet[3]; if(let > 0 && studBeg.godRojd >= 1970) { wcsncpy(u.studEnd.fam, studBeg.fam, wcslen(studBeg.fam)); wcsncpy(u.studEnd.imia, studBeg.imia, wcslen(studBeg.imia)); swprintf(u.studEnd.let, wcslen(u.studEnd.let), L"%i", let); } return u; } |
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Вот эта строка:
Код:
Код:
|
![]() |
![]() |
![]() |
#5 | |||
Пользователь
Регистрация: 19.04.2008
Сообщений: 22
|
![]() Цитата:
Код:
И некоторые вопросы: Цитата:
Но ведь для TCHAR может использоваться и wcsnpy! Нужно ли менять функции или это не так строго? Цитата:
Вот так? Код:
|
|||
![]() |
![]() |
![]() |
#6 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
[QUOTE=mat90x;92279]исправил это место на
Код:
Цитата:
Здесь я имел в виду именно вот эту проверку: Код:
Код:
Код:
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 19.04.2008
Сообщений: 22
|
![]() Цитата:
Извините за ламерство, но я еще только примерно 2 месяца программирую под Windows! Но что значит LOWORD(wparam)? Кроме как "младшее слово из wparam" и то что там храняться коды сообщений я ничего не знаю! |
|
![]() |
![]() |
![]() |
#8 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]() Цитата:
В нижней половине wParam по WM_COMMAND приходит идентификатор контрола, отправившего команду, в данном случае это и будут IDOK и IDCANCEL. И считается правильным, если в EndDialog будет передаваться команда, "закрывающая" диалог, с тем, чтобы можно было определить результат вызова самого диалога. |
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 19.04.2008
Сообщений: 22
|
![]()
Хорошо, и еще последний вопрос: чем отличается режим Debug от режима Release? Почему в Debug происходят ошибки, а в Release такие ошибки не происходят?
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
На самом деле это очень обширный вопрос, достойный отдельной темы, тем более, что один вопрос - одна тема. Если кратко, то это практически полностью разные режимы компиляции - используются разные функции и структуры данных для управления памятью - даже операторы new и delete - разные, в режиме DEBUG работает множество отладочных функций и макросов, вроде ASSERT, даже dll-библиотеки линкуются разные. А с другой стороны, это всё реализовано просто с помощью условной компиляции - директивами #define, #ifdef и т.д. А ошибки могут независимо друг от друга появляться то в отладочном, то в финальном варианте, смотря, что за ошибки.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Visual Studio 2005 | amelie | Win Api | 19 | 06.09.2008 12:40 |
visual studio.net 2005 | zub | Помощь студентам | 1 | 11.03.2008 07:29 |
Помогите с Visual Studio 2005 | Поночка | Visual C++ | 1 | 08.03.2008 15:34 |
Visual studio 2005 и C++ | oleg kutkov | Visual C++ | 7 | 09.01.2008 20:18 |
visual studio 2005 | }{@KeRnutyi | Свободное общение | 1 | 30.10.2007 15:36 |