Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
19:04:2008, 23:38
|
|
Новенький Группа: Новенький Сообщений: 4 Регистрация: 19:04:2008 Пользователь №: 16 751 Репутация: 0
|
писал программу и столкнулся с тем, что написанная функция для инициализации указателя не возвращает в точку вызова записанную по адресу строку.... никак не могу понять почему((( помогите, пожалуйста! заранее благодарен
1.c ( 602 байт )
Кол-во скачиваний: 8 |
|
Сообщение
#1
|
|
![]() |
|
|
20:04:2008, 00:46
|
|
Продвинутый Группа: Программист Сообщений: 141 Регистрация: 27:02:2004 Пользователь №: 296 Репутация: 6
|
При вызове make_stroke(str), содержимое переменной str (а именно - неинициализированный мусор) копируется в стек. Функция make_stroke() получает это значение в виде локальной переменной new_stroke, и присваивает всяческие значения этой самой локальной переменной new_stroke. После того, как функция закончила свою работу, стек (содержащий переменную new_stroke) очищается, и значение new_stroke (указывающее на считанную строку) теряется.
Переменная str во всём этом деле участвовала только на этапе копирования её значения в стек. Правильнее было бы одно из двух: 1) выделять память в main и передавать инициализированный указатель в функцию (а также размер выделенной памяти, чтобы следить за переполнением) 2) если действительно хочется, чтобы память выделялась по мере необходимости, P.S. не забудьте free(str) |
|
Сообщение
#2
|
|
|
|
20:04:2008, 05:29
|
|
Новенький Группа: Новенький Сообщений: 4 Регистрация: 19:04:2008 Пользователь №: 16 751 Репутация: 0
|
большое спасибо за помощь! разобрался
|
|
Сообщение
#3
|
|
|
|
22:04:2008, 04:39
|
|
Новенький Группа: Новенький Сообщений: 45 Регистрация: 15:04:2008 Пользователь №: 16 634 Репутация: 0
|
так мне кажется попроще будет!!... |
|
Сообщение
#4
|
|
![]() |
|
Текстовая версия | Сейчас: 12:10:2008 - 05:20 |