![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Robin |
|
||||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
просьба указать на ошибки |
||||
|
|||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
К моменту выполнения for(i = 0; inf[i].glob[0] && i<MAX; i++); в функции freef поле glob не проинициализировано ни каким значением.
А, если не секрет, каков смысл этого цикла? Это сообщение отредактировал(а) FiMa1 - 31.5.2007, 14:14 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Что-то я не вижу кода функции print(), которая вызывается при выборе 2-го пункта меню. |
|||
|
||||
Robin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
FiMa1 следовательно там 0, и запишется в первый слот, не так ли?
|
|||
|
||||
v_nikolaev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
проблема в том, что glob - указатель. он проинициализирован нулём, а когда ты к нему как к массиву обращаешься, он и смотрит первый элемент массива, начинающегося с адреса 0x0 - вот и проблема. |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Не так. С какой стати? Не зависимо ни от какого условия мы, при указании типа aim '1', т.е. Add, мы идем на выполнение функции freef: slot = freef(); К этому моменты указатель char *glob; не инициализирован ни каким значение (Bad Ptr), мы же с ним что-то пытаемся проделать... |
|||
|
||||
v_nikolaev |
|
||||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.5.2007 Репутация: нет Всего: нет |
даже, если проинициализировать нулём - проблема не исчезнет ![]() |
||||
|
|||||
Robin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
не помогло |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Да, согласен. Не понятен в принципе смысл цикла в приведенном выше контексте... |
|||
|
||||
FiMa1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Robin, понимаешь, после объявления char *glob; есть указатель, который, по-умолчанию, указывает на адрес 0x00000000 в памяти. Т.о, когда мы пишем for(i = 0; i<MAX; ++i) inf[i].glob[0]= '\0'; , мы пытаемся обратиться к glob как к массиву (массиву символов в твоем понимании здесь) вернее к первому элементу данного массива, т.е. все к тому же адресу 0x00000000 (уже сказал v_nikolaev). Видимо, следует сделать так (т.е. предварительно выделить память под MAX символов + проинициализировать указатель валидным адресом в памяти):
Это сообщение отредактировал(а) FiMa1 - 31.5.2007, 15:21 |
||||||
|
|||||||
Robin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
спс, только там в 7 срочке вместо inf[0].glob[i++] = '0'; - inf[0].glob[i++] = '\0';, тоесть не ноль а нулевой символ
|
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Я видел, не суть... Не забудь, что выделенную память придется где-то освобождать!!! Это сообщение отредактировал(а) FiMa1 - 1.6.2007, 08:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |