Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C++ проблема с динамическим массивом  (Прочитано 2266 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
К Убунте данный вопрос отношения не имеет, просто не знал куда вообще и кому задать, поcему извиняюсь если нельзя было...
Итак, есть классы:
(Нажмите, чтобы показать/скрыть)

инициализация происходит так:
(Нажмите, чтобы показать/скрыть)

ошибки выдает компилятор в строчках вида:
(Нажмите, чтобы показать/скрыть)

такую "тяжелую" иерархию с динамическим массивом пишу первый раз поэтому кто может, про шу объяснить подробно, как и почему исправить.  :-\

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #1 : 01 Август 2012, 00:53:15 »
Полный текст ошибок в студию.

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5157
  • Все по палатам!
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #2 : 01 Август 2012, 01:12:53 »
Вроде как должно быть
fscanf (dict, "%s", &words.eng[ii].w[0]); или
fscanf (dict, "%s", words.eng[ii].w);
и в какой это кодировке все будет?
Извините, я все еще учусь

Оффлайн [DarkNet]Alpha

  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
Re: C++ проблема с динамическим массивом
« Ответ #3 : 01 Август 2012, 01:13:14 »
Попробуйте так.
fscanf (dict, "%s", &(words[i].eng[ii].w));

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #4 : 01 Август 2012, 09:48:31 »
Ошибки:
(Нажмите, чтобы показать/скрыть)

Кодировка ASCII, как понимаю, словарик писался в vim'e и пока массивы были не динамическими, а статическими все прекрасно работало.

Вроде как должно быть
fscanf (dict, "%s", &words.eng[ii].w[0]); или
fscanf (dict, "%s", words.eng[ii].w);
и в какой это кодировке все будет?

ошибка остается

Попробуйте так.
fscanf (dict, "%s", &(words[i].eng[ii].w));

тоже самое  :-\
« Последнее редактирование: 01 Август 2012, 09:56:34 от dronte »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5157
  • Все по палатам!
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #5 : 01 Август 2012, 09:55:40 »
Лишняя зведочка * в
wd **eng;
wd **rus;
Извините, я все еще учусь

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #6 : 01 Август 2012, 10:02:30 »
хм ... перед тем как писать в основной код протестировал на коде:
(Нажмите, чтобы показать/скрыть)

и все работает, а если написать:
int *x = new int;

то  уже нельзя написать:
x[0] = new int (5);
x[1] = new int (10);

потому что ошибки:
(Нажмите, чтобы показать/скрыть)

или я что-то не понимаю?
« Последнее редактирование: 01 Август 2012, 10:04:08 от dronte »

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5157
  • Все по палатам!
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #7 : 01 Август 2012, 10:15:51 »
wd **eng;
wd **rus;
Это у тебя 2-х мерные массивы строк char[25], или 3-х мерные char, разбирайся
Извините, я все еще учусь

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #8 : 01 Август 2012, 10:29:30 »
или я что-то не понимаю?
"Это точно"(с) боец Сухов ;)

Не понимаете того, что указатель и массив в С и С++ - это далеко не одно и тоже, хоть и выглядят иногда похоже.
Но, поскольку массив в функцию всегда передаётся по ссылке, то после первого вызова, по всей цепочке вызовов, пошёл гулять указатель массива ... но от этого массив не становится указателем.

int *x = new int;

- никогда и никак не создаёт массив.

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #9 : 01 Август 2012, 11:09:01 »
хм ... ну да понял .. массив будет вот так ...

(Нажмите, чтобы показать/скрыть)

вопрос: Только как тогда можно увеличивать количество элементов массива, если предположим нужно не 10 а 11 элементов будет, уже после первого объявления?

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #10 : 01 Август 2012, 11:43:26 »
создать массив большей размерности в него переписать данные со старого массива и старый удалить, либо воспользоваться stl и ее vector и т.п. контейнерами....
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #11 : 01 Август 2012, 12:13:26 »
Ясно ... т.е. более простых методов добавления выделенной памяти нет, чтож спасибо ... будем действовать ....

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #12 : 01 Август 2012, 13:32:51 »
вопрос: Только как тогда можно увеличивать количество элементов массива, если предположим нужно не 10 а 11 элементов будет, уже после первого объявления?

И в С и в С++ принципиально нет массивов (да и любых других структур) динамической размерности - выделение памяти под переменные происходит единократно и не перераспределяется.

Для динамических структур используются:
- разнообразные связные списки (связь через указатели);
- только в С++: шаблонная библиотека STL, которая уже стала частью последних стандартов С++, такие типы данных как list<...>, vector<...>, queu<...>, map<...> и другие такие же ... string - который можно использовать как динамический массив байтовых данных.
- только в С++: кросс-платформенная библиотека BOOST - это сторонняя для С++ библиотека, но широко применимая.


Пользователь решил продолжить мысль 01 Август 2012, 13:34:19:
т.е. более простых методов добавления выделенной памяти нет

Проще, чем STL и не бывает ;)

Оффлайн dronte

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #13 : 01 Август 2012, 14:03:53 »
Ясно, спасибо ...
STL это я так понимаю std?
буду приобщаться значит ...
оффтоп
(Нажмите, чтобы показать/скрыть)

а пока может кто объяснить, откуда вылезло вот это при выполнении скомпилированного кода:

Что выползло в консоль:
(Нажмите, чтобы показать/скрыть)

собственно код:
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 01 Август 2012, 14:25:44 от dronte »

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: C++ проблема с динамическим массивом
« Ответ #14 : 01 Август 2012, 14:06:27 »
STL это я так понимаю std?

Нет, STL - это Standard Template Library ... это я так понимаю ;)

P.S. писать что-то в С++, не пользуясь при случае STL? ...  а зачем тогда пользоваться С++? ;)

 

Страница сгенерирована за 0.096 секунд. Запросов: 24.