Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > проблема с структурами |
Автор: Robin 31.5.2007, 13:46 | ||||
просьба указать на ошибки |
Автор: FiMa1 31.5.2007, 14:11 |
К моменту выполнения for(i = 0; inf[i].glob[0] && i<MAX; i++); в функции freef поле glob не проинициализировано ни каким значением. А, если не секрет, каков смысл этого цикла? |
Автор: JackYF 31.5.2007, 14:17 |
Что-то я не вижу кода функции print(), которая вызывается при выборе 2-го пункта меню. |
Автор: Robin 31.5.2007, 14:17 |
FiMa1 следовательно там 0, и запишется в первый слот, не так ли? |
Автор: v_nikolaev 31.5.2007, 14:21 | ||
проблема в том, что glob - указатель. он проинициализирован нулём, а когда ты к нему как к массиву обращаешься, он и смотрит первый элемент массива, начинающегося с адреса 0x0 - вот и проблема. |
Автор: FiMa1 31.5.2007, 14:21 | ||
Не так. С какой стати? Не зависимо ни от какого условия мы, при указании типа aim '1', т.е. Add, мы идем на выполнение функции freef: slot = freef(); К этому моменты указатель char *glob; не инициализирован ни каким значение (Bad Ptr), мы же с ним что-то пытаемся проделать... |
Автор: v_nikolaev 31.5.2007, 14:24 | ||||
даже, если проинициализировать нулём - проблема не исчезнет ![]() |
Автор: Robin 31.5.2007, 14:31 | ||
не помогло |
Автор: FiMa1 31.5.2007, 14:32 | ||
Да, согласен. Не понятен в принципе смысл цикла в приведенном выше контексте... |
Автор: FiMa1 31.5.2007, 14:50 | ||||||
Robin, понимаешь, после объявления char *glob; есть указатель, который, по-умолчанию, указывает на адрес 0x00000000 в памяти. Т.о, когда мы пишем for(i = 0; i<MAX; ++i) inf[i].glob[0]= '\0'; , мы пытаемся обратиться к glob как к массиву (массиву символов в твоем понимании здесь) вернее к первому элементу данного массива, т.е. все к тому же адресу 0x00000000 (уже сказал v_nikolaev). Видимо, следует сделать так (т.е. предварительно выделить память под MAX символов + проинициализировать указатель валидным адресом в памяти):
|
Автор: Robin 31.5.2007, 15:10 |
спс, только там в 7 срочке вместо inf[0].glob[i++] = '0'; - inf[0].glob[i++] = '\0';, тоесть не ноль а нулевой символ |
Автор: FiMa1 31.5.2007, 15:22 | ||
Я видел, не суть... Не забудь, что выделенную память придется где-то освобождать!!! |