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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Glide
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 3
#1

Точка останова - C++

21.12.2012, 14:04. Просмотров 1577. Ответов 5
Метки нет (Все метки)

Здравствуйте все!
Не пойму в чём проблема.
Вот так всё работает:
C++
1
2
3
4
5
void main()
{
    char *c = new char [5];
    delete [] c;
}
Но когда начинаю заполнять массив:
C++
1
2
3
4
5
6
void main()
{
    char *c = new char [5];
    c = "1234";
    delete [] c;
}
Генерируется ошибка:
Код
ОС Windows инициировала точку останова в Тест.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в Тест.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит Тест.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2012, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точка останова (C++):

точка останова - C++
Доброго времени суток! Если не сложно, объясните в чем ошибка. #include <iostream> #include <conio.h> using namespace std; ...

Не работает (?) точка останова - C++
Ставлю ее перед return, а окно все равно мигом закрывается. Как быть?

Точка останова(повреждение кучи) - C++
Прошу помочь, смотрел по форуму похожие темы - ответа не нашел void Base::Read() { char* name=new char;//переменная для имени ...

Точка останова с восклицательным знаком - C++
В проекте есть несколько точек останова с красным (незакрашенным) кружком и восклицательным знаком. Если навести на такую точку курсор...

C++ delete[] точка останова/повреждение кучи - C++
Добрый день. Подскажите, пожалуйста. Вот код функции: void interpol(point* a, int n, int k, point* y, int inter) //a-original ...

Невразумительная точка останова при выводе double - C++
Возникла небольшая проблемка в коде: void main() { int* mass; mass=(int*)malloc(sizeof(int)); I_List lst; double...

5
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
21.12.2012, 14:33 #2
ты пытаешься удалить память, не выделявшуюся new
C++
1
2
3
4
5
6
7
8
9
void main()
{
    char *c = new char [5];//присвоение с например c=0xFEF04 по адресу 0xFEF04
// нужно потом освободить память
    c = "1234";  //присвоение с другого адреса 
//например c=0xFEFE0 
    delete [] c;  //попытка освобождения памяти 
//по адресу 0xFEFE0 этот адрес вообще наверно не в куче находится
}
Добавлено через 6 минут
Вот и ошибка. Delete ожидал адрес 0xFEF04
0
Glide
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 3
21.12.2012, 14:33  [ТС] #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
присвоение с другого адреса например c=0xFEFE0
Но как правильно его заполнить?

З.Ы. Извеняюсь за глупые вопросы.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
21.12.2012, 14:34 #4
Цитата Сообщение от Glide Посмотреть сообщение
c = "1234";
собственно здесь как ты понял и есть ошибка. Зачем ты указываешь на этот ненужный строковый литерал?
оператор = всегда будет перенаправлять указатель на другой объект, если ты не знал. В данном случае происходит просто перенаправление указателя вместо выделенной строки на строковый литерал. Нельзя просто так приравнять указатель к чему-то, если он до этого указывал на выделенную память
Очевидно, ты хотел создать КОПИЮ строки в памяти выделенной new
Тогда
C++
1
2
3
4
5
6
void main()
{
    char *c = new char [5];
    strcpy(c, "1234");
    delete [] c;
}
1
Glide
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 3
21.12.2012, 14:45  [ТС] #5
Спасибо, теперь понял.

Добавлено через 2 минуты
Вот только я хотел создать не копию строки, а просто присвоить её к 'с'.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
21.12.2012, 14:56 #6
Цитата Сообщение от Glide Посмотреть сообщение
Вот только я хотел создать не копию строки, а просто присвоить её к 'с'.
ну так это нормально. ты создал строку с и заполнил её данными. если ты хотел иметь просто указатель на литерал "1234" мог бы не выделять память, а просто написать с="1234". Но зачем? Изменять его ты не сможешь, предупреждаю!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2012, 14:56
Привет! Вот еще темы с ответами:

При удалении указателя срабатывает точка останова - C++
В принципе, в заголовке все есть... Добавлю лишь, что я всего лишь маленький ламер, камнями не кидать в случае чего... Тыкните мне носом,...

Условие останова - C++
Привет, ребята. Посоветуйте плиз, как мне задать условие для того, чтобы ввод прекратился? Вот код: int i,choice; for(i=0;i<MAX;i++)...

Вызывание точки останова - C++
Ввести целое число N. Выделить из этого числа цифры, кратные m, и записать их в одномерный массив.-Условие задачи. Ниже моё...

Срабатывание точки останова - C++
Срабатывание точки останова при удалении указателя. Почему так? Кто-нибудь объяснит? #include <iostream> #define RT 100 int main()...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
21.12.2012, 14:56
Ответ Создать тему
Опции темы

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