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

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

Войти
Регистрация
Восстановить пароль
 
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
#1

Программа вылетает на delete[] Line - C++

11.12.2013, 13:45. Просмотров 460. Ответов 7
Метки нет (Все метки)

Подскажите, кто-нибудь. Программа вылетает на delete[] Line; не пойму почему, вроде, все синтаксически правильно...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int Size = 1, Step = 2;
    char * Line = new char [Size];
    int Count = 0, i = 0;   
    std::cin.get(Line[i]);
    while(Line[i] != '\n')
    {
        if(i >= Size)
        {
            char * Temp = new char [Size + Step];
            memcpy(Temp, Line, sizeof(char) * Size + 1);
            Size += Step;
            delete [] Line;
            Line = Temp;
        }
        Count++;
        i++;
        std::cin.get(Line[i]);      
    }
    std::cout<<Count<<'\n';
    Line[Count + 1] = '\0';
    std::cout<<Line<<'\n';
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 13:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа вылетает на delete[] Line (C++):

Вылетает программа из-за new и delete - C++
Cell.hpp #include &lt;SFML\Graphics.hpp&gt; #include &quot;state.hpp&quot; class Cell { private: sf::Sprite *sprite; state...

Почему вылетает программа на delete [] - C++
Здравствуйте, подскажите, пожалуйста, что именно не так и как исправить. Программа вылетает сразу же на деструкторе,т.е на delete . Хотя,...

Крашится программа при string в delete[] base - C++
Всем доброе утро. Делаю сейчас задание: требуется сделать класс Сотовая компания (MobCompany в коде), который содержит в себе класс...

По Лафору пример, программа останавливается на строке delete[] name; - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; char *getname(void); using namespace std; int main() { char *name = getname();...

Вылетает программа - C++
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о результатах сдачи зимней сессии: фамилия, шифр группы,...

Вылетает программа - C++
Выкидывает после того как вводишь название файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
uhx
60 / 60 / 6
Регистрация: 11.07.2013
Сообщений: 304
11.12.2013, 14:15 #2
C++
1
2
            delete [] Line;
            Line = Temp;
Может быть поэтому?

Добавлено через 16 минут
После удаления нельзя как либо взаимодействовать с этой переменной.
0
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
11.12.2013, 14:17  [ТС] #3
Но line ведь указатель, я освободила память на которую указывала line и присвоила ей новый блок памяти....
1
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,818
11.12.2013, 14:27 #4
Цитата Сообщение от ElenaBilyk Посмотреть сообщение
C++
1
2
3
4
5
6
7
        if(i >= Size)
        {
            // ... 
        }
        Count++;
        i++;
        std::cin.get(Line[i]);
Если в начале цикла i == Size-1, то после i++ получится i == Size. И запись в Line[Size] приводит к ошибке. Line[Size-1] - последний элемент массива.
Цитата Сообщение от ElenaBilyk Посмотреть сообщение
C++
1
2
           /*Зачем здесь ... + 1 ? */
           memcpy(Temp, Line, sizeof(char) * Size + 1);
Размер памяти, которую занимает Line[]: sizeof(char) * Size
1
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
11.12.2013, 14:28 #5
в строке 17 переменная i равна 1 вто время как размер массива Line тоже равен 1
1
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
11.12.2013, 14:31  [ТС] #6
Спасибо вам огромное!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,818
11.12.2013, 14:33 #7
Цитата Сообщение от ElenaBilyk Посмотреть сообщение
я освободила память на которую указывала line
Это правильно. Но перед тем, как память была освобождена, была изменена ячейка памяти( &Line[Size] ), не принадлежащая Line[]. И отладчик это обнаружил.
размер массива Line тоже равен 1
Значит Line[1] не принадлежит массиву. Нумерация начинается с 0. (Массив содержит один элемент: Line[0] )
1
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
11.12.2013, 17:22  [ТС] #8
Да, я поняла свою ошибку))))) Спасибо)))))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2013, 17:22
Привет! Вот еще темы с ответами:

Вылетает программа - C++
Вот что пишет: вот код: /*С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой....

Программа С++ вылетает - C++
Вылетает.Я новичок в с++ подскажите может надо что то дописать? #include &lt;iostream&gt; // Подключение библиотеки потокового ввода/вывода ...

Вылетает программа - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct game2048 { int ar; void start() {

Вылетает программа - C++
Работаю в dev-c++ программа компилируется нормально, как только запускаю вылетает. Помогите пожайлуста #include &quot;windows.h&quot; ...


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

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

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