Форум программистов, компьютерный форум CyberForum.ru

malloc/realloc - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
kess
 Аватар для kess
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 27
28.07.2009, 16:35     malloc/realloc #1
есть следующий код:
C++
1
2
3
4
5
6
7
8
9
mmlist=(_mathmod*)malloc(sizeof(_mathmod));
                  *mmlist=_mathmod(mm);
                  int i=0;
                  while(i<10)
                  {
                     i++;
                     mmlist=(_mathmod*)realloc(mmlist,(i+1)*sizeof(_mathmod));
                     mmlist[i]=_mathmod(mm);//mm-указатель на строку типа char*
                  }
При этом в классе есть 4 поля.
Вопрос:
Почему не инициализируется первое поле экземпляра класса если ему передаётся ненулевой указатель при нулевом указателе всё работает как надо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 16:35     malloc/realloc
Посмотрите здесь:

C++ Помогите переделать malloc в realloc!
C++ realloc
malloc, realloc C++
C++ Работа с памятью через malloc,realloc и free
C++ realloc
realloc C++
C++ Функция realloc
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
28.07.2009, 16:43     malloc/realloc #2
Полный код где ?
И что такое "первое поле экземпляра класса" ?
"ему передаётся ненулевой указатель" - кому ему ? где передается ?
Короче ничего не понял.
kess
 Аватар для kess
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 27
28.07.2009, 16:55  [ТС]     malloc/realloc #3
есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
class _mathmod
{
private:
   char *fname;
   _math *pointer;
   char *mmdesc;
   unsigned short *tact;
   unsigned short *queue;
   bool *active;
public:
   _mathmod::_mathmod(char *);
}
есть конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
_mathmod::_mathmod(char *mnm)
{
   if(strlen(mnm)<=11&&strlen(mnm)>0)
   {
      fname=new char[strlen(mnm)];
      fname=mnm;
      pointer=NULL;
      mmdesc=NULL;
      tact=NULL;
      queue=NULL;
      active=NULL;
   }
   else try {throw((unsigned short)1);}
   catch(unsigned short err)
   {
      fname=NULL;
      pointer=NULL;
      mmdesc=NULL;
      tact=NULL;
      queue=NULL;
      active=NULL;
      Application->MessageBoxA("Введено недопустимое значение для параметра"
                " - идентификатор математической модели.","Ошибка",MB_ICONSTOP);
   }
}
есть вышеуказанный код.
при этом в поле fname не записывается то, что передано в конструктор, при ошибочном значении NULL записывается нормально.

Не по теме:

сорри за некоректный вопрос,туплю уже.

ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
28.07.2009, 16:59     malloc/realloc #4
malloc не вызывает конструктор класса, используй new/delete;
kess
 Аватар для kess
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 27
28.07.2009, 18:46  [ТС]     malloc/realloc #5
Цитата Сообщение от ISergey Посмотреть сообщение
malloc не вызывает конструктор класса, используй new/delete;
вы хотя бы код смотрели, я конструктор вызываю сам!
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
28.07.2009, 18:52     malloc/realloc #6
Код
fname=new char[strlen(mnm)];
fname=mnm;
Вот этот момент сомнителен. Память выделил, но строку не записал, а только присвоил fname'y указатель на mnm; потом содержимое mnm наверняка теряется и fname указывает уже непонятно на что. Вобщем, пробуй так сделать
Код
fname=new char[strlen(mnm)+1]; //+1 для нуль-символа
strcpy(fname, mnm);
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
28.07.2009, 19:04     malloc/realloc #7
я конструктор вызываю сам!
несомненно, это новое слово в с++ извращениях, достойное вхожения в анналы (не путать с аналом) истории, явно чувствуется почерк профи :lol:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2009, 18:58     malloc/realloc
Еще ссылки по теме:

функции на основе realloc, malloc C++
Malloc realloc и C++ C++
C++ Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
Что быстрее/эффективнее malloc/realloc или new/delete? C++
В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alexandoros
226 / 64 / 4
Регистрация: 02.06.2009
Сообщений: 280
29.07.2009, 18:58     malloc/realloc #8
Собственно тебе нужно почитать книжку по основам ооп в с++.

C++
1
2
 fname=new char[strlen(mnm)];
 fname=mnm;
бессмысленно.

C++
1
2
else try {throw((unsigned short)1);}
   catch(unsigned short err)
бессмысленно.

C++
1
*mmlist=_mathmod(mm);
Исходя из твоего кода бессмысленно.

Читать нужно про конструктор, конструктор копирования и зачем он нужен, переопределение оператора =.
Yandex
Объявления
29.07.2009, 18:58     malloc/realloc
Закрытая тема Создать тему
Опции темы

Текущее время: 01:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru