![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
admsasha |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
есть код
компиляция удачно проходит, но выдается:
что нужно сделать что бы это исправить ? как правильно написать данную функцию ? |
||||
|
|||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Так нельзя!
Вот, так можно, но потом не забыть delete
|
|||
|
||||
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
delete где должна стоять ? |
|||
|
||||
Artiom |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Надо передовать строку как параметр через указатель. Какой тебе толк в адресе локальной переменной?
-------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
мне надо просто вывод результата функции... и больше нечего
per1=proba(); |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
"просто вывод" замешивает аллокацию памяти.
если хочешь правильней делать, то аллоцируй над функцией, и передавай указатель. функция в него чего-нить впишет. вообще, старайся не скрывать аллокацию памяти, потом легче жить будет. добавляю файл... посмотри. Это сообщение отредактировал(а) bilbobagginz - 18.4.2005, 14:59 Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
есть еще один вариант
дописать static к объявлению локальной переменной получится нечто вроде глобальной переменной, только видно ее будет только из функции есть недостаток при каждом вызове функции старое значение будет стираться если приведенный пример полностью отображает ситуацию - можно использовать если реально поведение функции будет сложнее, тогда надо будет это учитывать... -------------------- qqq |
|||
|
||||
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
А мне и не надо, что бы сохранялось старое значение... даже наоборот нужно что бы новое писалось !
Или я неправильно это понимаю ?? вот допустим функция rnds
код так просто набрал... т.е. мне не надо что бы при использовании кокой либо части программы менялось первое значенение... Это сообщение отредактировал(а) admsasha - 19.4.2005, 08:11 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
я имел в виду такое:
после таких операций p будет равно pp, а значит, указывать они будут на одну и ту же строку... -------------------- qqq |
|||
|
||||
GrayCardinal |
|
||||||||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
admsasha
Извини, тебя кто учил программить на Си ? Руки тому поотрывать ![]()
Нельзя возвращать указатель на переменную, которая у тебя лежит в стэке функции. При выходе из функции не факт что стэк не затрется (об этом и предупреждение компилятора. Там надо например
Добавлено @ 15:21
и часто ты так извращаешься ? Добавлено @ 15:23
По-моему человеку в FAQ в раздельчик - Си для чайников. Это сообщение отредактировал(а) GrayCardinal - 21.4.2005, 15:24 |
||||||||
|
|||||||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
тов. Кардинал... тебя самого на Си блин кто new писать учил ?
![]() в Си нету "new" и "delete", есть malloc(),calloc(), realloc(), brk(),sbrk() и free(). -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
bilbobagginz
Не надо, я в курсе. Но по сравнению с тем, что ему предложили... ![]() ![]() ЗЫ И не надо сокращать мой творческий псевдоним. Добавлено @ 15:45 ЗЫЫ, а вообще я и daemon () знаю, меж прочим ![]() |
|||
|
||||
Fire-Plug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
admsasha
Неплохо было бы четко сформулировать, что должно в принципе происходить в твоей ф-ции. Если нужно, чтобы ф-ция возвращала char *, то все возможные решения тебе уже были предложены, а именно, 1) вернуть указатель на динамич. массив, созданный в теле ф-ции (bel_nikita). 2) вернуть указатель на статич. массив, объявленный в теле ф-ции (maxim1000). 3) вернуть указатель на локальный массив, объявленный вне тела ф-ции, к-рый передается в ф-цию как параметр (Artiom). А вообще, тебе следовало бы еще раз обратиться к определениям понятий о видимости и времени жизни переменных различных классов памяти в С/С++. --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
admsasha |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
т.е. если функция отдает каждый раз разные данные, то p и pp будут меняться ???? т.е. всегда иметь одно и тоже значение ? Вот как раз мне это и не надо ! мне надо что по нормальному все делалось {как же я не навижу все эти ссылки}... т.е. каждый вызов нечего не менял нигде, а записывал результат в char[100]; Это сообщение отредактировал(а) admsasha - 24.4.2005, 17:00 |
||||
|
|||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Данные то она отдает разные но значение указателя одинаковое, ибо static char. Добавлено @ 17:04
Тогда нафига тебе вообще что-то возвращать? ![]() --------------------
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |