![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ТРЕТЬ |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 8.1.2006 Где: mind's gloomy corner Репутация: нет Всего: 1 |
Вот задача (не полный вариант, а именно, то на чем я погорел). Нужно создать одномерный массив строк произвольно длины, не более чем на 100 эл-тов (имеется ввиду что сами строки не ограничены по длине). Вот что далал я...
На сколько я понял, я этим задаю конструкцию "массив указателей на строки". Далее дописал нужные функции... Все реализованно через классы, ну да не важно... Запустил - ошибка (при чем не на уровне компиляции а во время выполнения)... При чем как-будто выход за предел массива. Проверил, не вылетает где-нибудь в программе счетчик за предела от 1 до 101. Вроде бы нет... Решил тогда вот такой тест провести. Написал вот такую прожку.
Сработало нормально... Решил все-такие еще проверить. Изменил код вот так.
Запускаю. И сразу ошибка! Такая же как в начале... Тогда решил, что это мне Борланд свинью подкладывает (ВСРР 5.02). Смотрю, есть VC. Закинул туда код. С cout - ом почему-то не захотел работать, пришлось заменить на puts. И вот я с отвисающей челестью, смотрю, что программа работает, при чем обсолютно нормально! Потом еще пытался переписать прогу в студии, но там, оказалось, нужные функции несколько изменены, а документацию кто-то снес... Перепробовал еще несколько вариантов... Ладно, не важно... Короче отправили меня на пересдачу... Вот объясните мне пожалуйста, что я не так делал. Или это действительно ошибка компилятора? Может вы бы как-то по-другому решали бы эту задачу? Как? |
||||||
|
|||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
если насчет примеров, все они рабочие (g++ 4.1) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Ты б написал, какая ошибка выскакивала.
-------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
maalan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
воотще говоря, это массив указателей!
и следовательно память для хранения строк никакая не выделялась хранятся только указатель на строки. для правильной работы надо выделить память под строки с помощью NEW но так как надо иметь строки произвольной длины, то я бы сделал так std::vector<vector<string> >string_array(100); ну и далее по тексту string[0] = "hi"; string[1] = "people"; string[2] = "of the world"; cout<<string[0]<<string[1]<<string[2]; getch(); |
|||
|
||||
ТРЕТЬ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 8.1.2006 Где: mind's gloomy corner Репутация: нет Всего: 1 |
SaDFromSpb,
Я бы и нарписал... Да только я же не помню на память, а то что оно мне писало то в универе и соталось=). На самом деле сейчас настолько гадостное ощущение на душе... Просто дома пишу скрипт (в той же ВСРР 5.02) работает... А там нет... Блин, и из-за этого мне в среду опять идти на экзамен... Оператива у них там паленая что ли? Ну не может же такого быть, чтобы написать одно и то же и в одном месте оно работает без проблемм, а в другом никак... Обидно... Добавлено @ 16:35 maalan, Спасибо... Вот сейчас проверил, вроде выполняется... И почему мне это тогда в голову не пришло? жаль=) Да и все равно опять же, если и без этого дома работает, то это скорее на глюк тянет. чем на то что реальная ошибка=) |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
все тут выделилось (в сегменте константных данных) и адрес этих строк присвоился указателям на стеке -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
maalan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
т.е. если написать
char * a; a = "test"; то это нормально? и если так написать int *x; *x = 100; это тоже правильно? Это сообщение отредактировал(а) maalan - 27.6.2006, 08:18 |
|||
|
||||
kirjanov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 22.1.2006 Где: Dark wood of erro r Репутация: 1 Всего: 15 |
maalan,
во 2 случае у тебя не инициализирован x, и 100 запишется, куда повезет. |
|||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ничего противозаконного
это уже другой случай |
||||
|
|||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
в большинстве случаев вообще не запишется а вылетит SEGMENTATION FAULT
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
maalan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
![]() то-то я так эти charы не перевариваю ![]() сказывается небольшой опыт в чистом си с++ мне все-таки больше нДравиться да и stl тоже красота |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
В том то и смысл ООП: инкапсулировать реализацию и предоставить приятный интерфейс а на нижнем уровне STL (реализация) также и с указателями и с памятью работает -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
maalan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
абсолютно согласен но до чего же все-таки не логично оба указатели, а работают по-разному если сам такое напишешь со своим классом и т.д., потом ошибку будешь долго искать |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
все логично (см. цитату) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
maalan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2006 Репутация: нет Всего: нет |
так в цитатах-то все логично, спору нет ![]() в поведении указателей нет логики char не такой, как все остальные и вообще, куда-то мы не туда в разговоре полезли ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |