Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.12.2014, 12:21
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Функция возвращает результат верно: "Hello", но если раскоментировать строку - то возврат "ello". Почему так??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 12:45
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Микола ПитерскийПочему так??? Потому что ты, видимо, никогда не слышал о времени жизни переменных, указателях и работе компьютерной памяти. Поэтому используешь указатель на уже несуществующую переменную. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 12:50
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Dimitry Sibiryakov, давай без бла-бла - не хочешь помочь так и не надо - или тебе за количество пустых коментов платят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:00
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Микола Питерский, Нельзя возвращать из функции указатель на локальную переменную. Запрещено. Перепишите код без возврата такого указателя и все заработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:02
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Твой str1[10] после выполнения return превращается в кусок свободной памяти стэка и может быть в любой момент занят другой переменной. Пиши так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:04
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Anatoly Moskovsky, дело в том что я понял суть проблемы - но не знаю как это сделать по другому. Мне нужно из функции возвратить строковое значение - как переписать пример чтобы надежно работал? Раньше передавал это значение через пар-р функции - все работало, но теперь хочу переписать на возврат его из функции - или это невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:15
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Dima TТвой str1[10] после выполнения return превращается в кусок свободной памяти стэка и может быть в любой момент занят другой переменной. Пиши так: Код: plaintext 1. Спасибо - теперь работает нормально. А есть ли более правильный способ это делать? Вот я еще так делаю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Есть ли в этом примере какие подводные камни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:18
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Забыл добавить что со static нельзя два указателя использовать, первый поменяется. Запусти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:23
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Микола Питерский Код: plaintext 1. 2. 3. 4. Есть ли в этом примере какие подводные камни? Надо чтобы потом была освобождена память, когда значение станет ненужно. Т.е. так Код: plaintext 1. 2. 3. иначе это утечка памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:26
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Dima T, спасибо большое - теперь понял где у меня были косяки:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:26
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Микола ПитерскийА есть ли более правильный способ это делать? В вызывающем коде создать буфер и передать в параметрах указатель на буфер и его размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:31
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Dima TВ вызывающем коде создать буфер и передать в параметрах указатель на буфер и его размер. Микола ПитерскийРаньше передавал это значение через пар-р функции - все работало, но теперь хочу переписать на возврат его из функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:38
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Микола ПитерскийDima TТвой str1[10] после выполнения return превращается в кусок свободной памяти стэка и может быть в любой момент занят другой переменной. Пиши так: Код: plaintext 1. Спасибо - теперь работает нормально. А есть ли более правильный способ это делать? Вот я еще так делаю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Есть ли в этом примере какие подводные камни? есть. пользователь кода должен удалять память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:40
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Ясно - спасибо ребята. Переделаю обратно через параметр - действительно надо в одном месте сосдавать и освобождать память - а то так и до утечки совсем недалеко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2014, 13:49
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Микола ПитерскийМне нужно из функции возвратить строковое значение - как переписать пример чтобы надежно работал? Прежде всего, ты должен понять, что в чистом С (в смысле не С++) не может быть просто функции, возвращающей строковое значение. Функция может только формировать это строковое значение. Вопрос весь в том, где она будет это делать. Это должно быть определено в спецификации функции. Она должна использовать какой-то буфер, важно, что это будет за буфер. Это может быть буфер в статической памяти, но тогда вопрос в размере этого буфера (хватит ли), и в многопоточности. Это может быть буфер, предоставляемый (с размером) вызвыающей функцией. Это может быть буфер, выделяемый внутри данной функции. Это всё должно быть в спецификации на функцию. После этого можно начинать функцию программировать. А ты этого не сделал, стал сразу программировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2014, 12:37
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
вариант 1 Код: plaintext 1. 2. 3. 4. этот код работает и в конце строки есть "14" вариант 2 Код: plaintext 1. 2. 3. 4. 5. 6. этот код в конец строки не добавляет "14" - почему? И как правильно добавить "14", используя вариант №2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.12.2014, 13:08
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
strlen() дает количество символов без учета завершающего \0 индекс начинается с нуля, т.е. tmp[len] это '\0' от исходной строки Так надо Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 15:29
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Решил перевести код на с++ и отгреб кучу проблем - полдня гугления ничего не дали: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Этот код компилируется, но если раскоментировать закомментированные 2 строки - то получаю ошибку: Код: plaintext 1. 2. 3. 4. Почему ?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 15:56
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Микола Питерский, Там же написано английским по белому: у вас goto перепыгивает через объявление переменной и она некорректно инициализируется. Объявите jfieldID fid1 и прочие до goto, например в начале функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 16:10
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Anatoly Moskovsky, спасибо - действительно помогло. Но этот код без проблем компилируется на С. И не понятно почему такое ограничение в с++ - или в нем как в делфи теперь все переменные нужно объявлять в начале функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 16:15
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Микола Питерский, В С нет конструкторов, поэтому компиляторы не занимаются выявлением такого кода - хотя и в С и в С++ - это ошибка в программе. Микола Питерскийтеперь все переменные нужно объявлять в начале функции? Это относится только к переменным в сочетании с goto и switch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 16:39
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Микола Питерскийэтот код без проблем компилируется на С. И не понятно почему такое ограничение в с++ А не должен бы компилироваться. Потому что объявление переменных в произвольном блоке это как раз изобретение С++, а в С они должны были объявляться в начале функции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 16:40
|
|||
|---|---|---|---|
|
|||
Почему такой результат? |
|||
|
#18+
Dimitry Sibiryakov, Та ладно, еще в С99 официально разрешили )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
22.12.2014, 17:10
|
|||
|---|---|---|---|
Почему такой результат? |
|||
|
#18+
Dimitry SibiryakovМикола Питерскийэтот код без проблем компилируется на С. И не понятно почему такое ограничение в с++ А не должен бы компилироваться. Потому что объявление переменных в произвольном блоке это как раз изобретение С++, а в С они должны были объявляться в начале функции. ] В С это уже давно "расслабили". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2019177]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
61ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 285ms |
| total: | 460ms |

| 0 / 0 |
