Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель на char в структуре 
V
    Опции темы
FallenAngel
Дата 11.12.2007, 20:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Доброго времени суток!
Есть код:
Код

struct dni
{
 char data[12], *zametka;
 int day, mon, year;
};

 void main()
{
 dni  *nov;
 int lenz=0; //длина введённой заметки
 nov=new dni;
 lenz=strlen(MainForm->NoteEdit->Text.c_str());
 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();
 nov->day=atoi(MainForm->DayEdit->Text.c_str());
}


В предпоследней строке в "заметку" кладётся некая строка из эдита.
В последней же, в "день" кладём число из другого эдита. Почему при последнем действии в nov->zametka попадает тоже, что и в  nov->day, и как это исправить?
  Вверх
zkv
Дата 11.12.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(FallenAngel @  11.12.2007,  20:09 Найти цитируемый пост)
и как это исправить? 

для начала понять наверное, что нельзя так делать:
Код

 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();

этим самым ты просто скопировал указатель, притом на временный объект, да еще и память выделенную потерял.

наверное ты хотел нарисовать что-то вроде:
Код

 nov->zametka=new char[lenz];
 strcpy( nov->zametka,MainForm->NoteEdit->Text.c_str() );


но если пишешь на С++, почему не использовать std::string?
PM MAIL   Вверх
bel_nikita
Дата 11.12.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: нет
Всего: 47



Цитата(FallenAngel @ 11.12.2007,  19:09)
Есть код:
Код

struct dni
{
 char data[12], *zametka;
 int day, mon, year;
};

 void main()
{
 dni  *nov;
 int lenz=0; //длина введённой заметки
 nov=new dni;
 lenz=strlen(MainForm->NoteEdit->Text.c_str());
// memory leak!
 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();
//
 nov->day=atoi(MainForm->DayEdit->Text.c_str());
}

Так делать нельзя, для чего память выделял?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
FallenAngel
Дата 11.12.2007, 20:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Огромное Пасип!!!
Доконца ещё не разобрался с указателями на тип char.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.