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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
#1

bad ptr - C++

22.05.2010, 09:51. Просмотров 1835. Ответов 5
Метки нет (Все метки)

Здравствуйте!
Пишу небольшую программу для работы с текстом. При substr'е куска строки вывелся не только нужный мне кусок, но и немного мусора из памяти(вроде ══════¤¤¤¤лллллллл■ю■). После непродолжительной отладки выяснилось, что при объявлении указателя на массив символов и его инициализации:

C++
1
char* buff="some text\0";
значение buff равно <bad ptr> и ссылается он на 0xcccccccc

Самое непонятное то, что при объявлении указателя на массив символов в других функциях все происходит нормально и мусора из памяти нет!
Что мне делать? Вроде бы объявляю и инициализирую все правильно.

Спасибо за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2010, 09:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос bad ptr (C++):

Ошибка bad ptr при возвращении занчения из функции - C++
Помогите по функции, не возвращает значения, вот как объявлена функция и вот как пытаюсь вызвать чтобы получить значение этой самой функции...

Ошибка на стадии выполнения ptr = ptr; - C++
class CObject { friend Parser; // много полей методов, все должны заполняться в парсере } class Parser { CObject * object_...

Неверно работает код *ptr++ = *ptr2++ - C++
Собственно столкнулся со следующей проблемой, код выглядит так: #include &lt;iostream&gt; using std::cout; using std::endl; int...

Значение указателей (*ptr.) на пустые ячейки памяти - C++
Здравствуйте, уважаемые форумчане! С началом изучения С++ стало возникать множество вопросов. Когда резервируется свободная память...

Как динамически обьявить многомерный массив (ptr = new int[5][5])? - C++
как обявить вот такую вот штуку: int * ptr = new int; заранее благодарен Роман.

Что означает строка: CString &ptr = Text; ? - C++
Помогите please! Что означает строка: CString &amp;ptr = Text; Text определена выше, как: CString Text;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 10:33 #2
зачем указатель
C++
1
char buff[] = "some text\0";
0
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
22.05.2010, 11:23  [ТС] #3
Цитата Сообщение от Roma_F Посмотреть сообщение
зачем указатель
C++
1
char buff[] = "some text\0";
К Вашему сведению, это одно и то же.
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
22.05.2010, 12:12 #4
Цитата Сообщение от AK3RN Посмотреть сообщение
К Вашему сведению, это одно и то же.
Во-первых это не одно и то же. Про разницу в этих двух объявлениях не раз писали на форуме. В двух словах
C
1
2
char *buf1 = "abcd"; /* неконстантный указатель на константную строку */
char buf2[] = "efgh"; /* константный указатель на неконстантную строку */
и кстати во-вторых '\0' в конце строки и сам поставится.
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 13:27 #5
Цитата Сообщение от AK3RN Посмотреть сообщение
Самое непонятное то, что при объявлении указателя на массив символов в других функциях все происходит нормально и мусора из памяти нет!
Что мне делать? Вроде бы объявляю и инициализирую все правильно.
а вообще что вы от нас то хотите?
здесь телепатов нет - от приведённой строчки толку нет, сама по себе она ошибку не вызовет, об остальном коде можно только догадываться по вашему краткому описанию

Цитата Сообщение от AK3RN Посмотреть сообщение
К Вашему сведению, это одно и то же.
(в дополнение к посту easybudda)
C++
1
2
3
4
5
char buff1[] = "some text";
char *buff2 = "some text";
 
cout << sizeof(buff1) << endl;
cout << sizeof(buff2) << endl;
0
AK3RN
307 / 18 / 3
Регистрация: 01.05.2010
Сообщений: 250
22.05.2010, 15:08  [ТС] #6
Кода у меня там около двух-трех сотен строк. Выкладывать всё смысла нет. Подробнее: создал функцию, первой строкой написал char* buff="some text\0"; и все, сразу ошибка. Может ли быть это от того, что в других функциях выделяемая при помощи new память не освобождается?

Добавлено через 13 минут
Проблема решена. Спасибо за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2010, 15:08
Привет! Вот еще темы с ответами:

bad скрипты в TWebBrowser - C++
всем привет! есть проблема: при открытии url в компоненте TWebBrowser начинают вылезать варнинги о работе javascript скриптов. ...

istream состояние bad - C++
Всем привет! Как можно вызвать состояние bad у потока istream? (т.е. не так, что &quot;состояние bad может быть вызвано серьезной ошибкой...

Unique ptr в классе - C++
Добрый вечер, есть ли реальное решение придерживаться правилу нуля и иметь в классе std::unique_ptr ?

Ошибка "Bad allocation" при обращении к массиву - C++
Такая проблема: выбивает bad allocation в 59 строке мейна. Запустите программу, введите 2 числа и выберите &quot;Сложение&quot;, введите &quot;0 1&quot;. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.05.2010, 15:08
Закрытая тема Создать тему
Опции темы

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