|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.05.2014, 06:21 | #1 |
Пользователь
Регистрация: 03.12.2008
Сообщений: 20
|
Подскажите пожалуйста правильно ли я, динамически распределяю память?
Добрый день,
Подскажите пожалуйста только недавно начали Си изучать и нам дали такое задание: Считать строку любой длины с клавиатуры и переделать ее в массив с динамическим выделением памяти, вот код который я написала, ошибки он не выдает, но я не знаю правильно ли он работает?, и можно ли таким способом выделить память? Код:
|
16.05.2014, 08:48 | #2 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Вы не освобождаете выделенную память.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
16.05.2014, 10:03 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Например, куда прочитает данные fgets(S)?
А для чего нужен tab вообще непонятно. Копировать программа ничего не будет, независимо от того, будет выделена память или нет, потому что return выполняется всегда. Данную программу никто даже и не компилировал. Ответ - программа вообще не работает, ни правильно, ни неправильно. |
16.05.2014, 10:42 | #4 |
C/C++, Java
Участник клуба
Регистрация: 28.03.2012
Сообщений: 1,680
|
Nata Golden rose вы на правильном пути... Развивайте мысль. Не ошибается только тот кто ничего не делает
Код:
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости" Сложность - враг простоты и удобства! |
16.05.2014, 22:17 | #5 |
Пользователь
Регистрация: 03.12.2008
Сообщений: 20
|
А если вот так сделать:
#include <stdio.h> #include <stdlib.h> #ibclude <string.h> Код:
|
17.05.2014, 02:04 | #6 |
Форумчанин
Регистрация: 03.04.2013
Сообщений: 167
|
gets не понимает сколько выделено памяти для указателя S
т.е. вместо Код:
Код:
Код:
Последний раз редактировалось alekopoko; 17.05.2014 в 16:55. |
17.05.2014, 02:09 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Nata Golden rose,
Потому что вы не правильно пользуетесь функцией gets(S); Эта функция на входе получает указатель на буффер, в котором она размещает строку. Но у вас нет хранилища данных под строку. А ваш указатель S в самом начале программы явно не проинициализирован. А значит - содержит мусор. Некий случайный адрес. gets записывает по этому адресу данные строки, перетирая при этом чужую информацию. Это может приводить к самым непредсказуемым последствиям. Иногда программа сможет нормально отработать. А иногда будет падать. Как повезет. Правильное использование этой функции описано в документации. Внимательно рассмотрите пример: http://www.cplusplus.com/reference/cstdio/gets/ |
17.05.2014, 02:13 | #8 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
И да, кстати. Согласно вашему заданию:
Считать строку любой длины с клавиатуры и переделать ее в массив с динамическим выделением памяти Ваше решение не верное. Использование gets предполагает заранее известный размер хранилища данных. Но поскольку по условию длина строки может быть какой угодно, то вы на это закладываться не можете. А значит эта функция вам не подходит. Последний раз редактировалось _Bers; 17.05.2014 в 02:15. |
17.05.2014, 03:12 | #9 |
Новичок
Джуниор
Регистрация: 17.05.2014
Сообщений: 1
|
Код:
Последний раз редактировалось vandit86; 17.05.2014 в 03:31. |
17.05.2014, 14:11 | #10 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
vandit86, ваш код не компилируется.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
динамически распределяемая память | skauzer_blr | Помощь студентам | 3 | 28.05.2012 09:29 |
Динамически распределяемая память!! | Андрей frost | Общие вопросы C/C++ | 6 | 16.05.2012 19:19 |
подскажите пожалуйста что не правильно в скрипте. | 6AT9 | JavaScript, Ajax | 1 | 25.11.2008 00:21 |