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

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

Войти
Регистрация
Восстановить пароль
 
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
#1

Ошибка при удалении динамически выделенной памяти - C++

02.04.2013, 13:57. Просмотров 430. Ответов 3
Метки нет (Все метки)

Добрый день, хочу удалить выделенный массив, но выдает ошибку.
Вот собственно код создаваемой функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using namespace std;
void FillStruct(VideoShop *a, int n)
{
    char *buff = new char [100];
    int *buff1;
    int length= strlen(buff)+1;
    a->name = new char *[n];
    a->director = new char *[n];
    a->genre = new char *[n];
    setlocale(LC_ALL, "russian");
    for(int i=0; i<n; i++)
    {
        cout<<"\nНазвание фильма : ";
        gets_s(buff, length);
        a->name[i]=new char [length];
        for(int j=0; j<length; j++)
            a->name[i][j]=buff[j];
        delete[] buff;
        //buff = new char [100];
 
        cout<<"Режиссер : ";
        gets_s(buff, length);
        a->director[i]=new char [length];
        a->director[i]=buff;
        delete[] buff;
        buff = new char [100];
 
        cout<<"\nЖанр  : ";
        gets_s(buff, length);
        a->genre[i]=new char [length];
        a->genre[i]=buff;
        delete[] buff;
        buff1 = new int [100];
 
        cout<<"\nРейтинг популярности : ";
        cin>>buff1[i];
        a->rating=new int [i];
        a->rating[i]=buff1[i];
        delete[] buff1;
        buff1 = new  int [10];
 
        cout<<"\nЦена диска : ";
        cin>>buff1[i];
        a->price=new int [i];
        a->price[i]=buff1[i];
        delete[] buff1;
    }
}
0
Миниатюры
Ошибка при удалении динамически выделенной памяти  
Вложения
Тип файла: zip Source.zip (1.4 Кб, 1 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2013, 13:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при удалении динамически выделенной памяти (C++):

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

Ошибка с delete при удалении памяти из-под строки - C++
strngbad.h // strngbad.h -- flawed string class definition #include &lt;iostream&gt; #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class...

Как склеить два куска динамически выделенной памяти? - C++
Есть такой код char *arr = (char *) malloc(1); char *plus = (char *) malloc(25); arr = memcpy(arr + 1, plus, 25); Вопрос: можно ли...

Как обнулить указатель на одну ячейку в динамически-выделенной памяти? - C++
Выделю память под 10 элементов: int* p = new int; Наполняю значениями: for(int i = 0; i&lt;10; i++) { p = i; } Можно...

Ошибка при высвобождении ранее выделенной памяти под динам. массив - C++
Собственно, в чем суть: //инициализирую bool* delimeters = new bool; ... //Удаляю delete delimeters; Точки останова...

Ошибка при выделении памяти динамически для структуры - C++
Есть программа. Вылетает ошибка. Если gets(BLOCKNOTE.NAME) заменить на cin&gt;&gt;BLOCKNOTE.NAME все работает нормально. Хотелось бы ипользовать...

3
hofmn
Helter Skelter
61 / 61 / 1
Регистрация: 19.09.2012
Сообщений: 133
02.04.2013, 14:09 #2
C++
1
2
3
4
5
void FillStruct(VideoShop *a, int n)
{
    // ... весь код
   delete [] buff; // предыдущие "delete [] buff;" удалить 
}
0
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.04.2013, 14:14 #3
Цитата Сообщение от vadim09 Посмотреть сообщение
int length= strlen(buff)+1;
У тебя buff не указывает гарантированно на С-строку. Значение length у тебя не определено и может быть больше, чем размер выделенного буфера. А может и не быть. И баф удаляешь несколько раз.
0
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
04.04.2013, 21:38  [ТС] #4
Цитата Сообщение от Vourhey Посмотреть сообщение
И баф удаляешь несколько раз.
Ошибку выдает на первом удалении. А причем тут length?
Я с buff ничего не делал. Только записал в него строку и всё.
Так что же делать?
0
04.04.2013, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 21:38
Привет! Вот еще темы с ответами:

Утечка памяти при удалении - C++
Здравствуйте! Возникла проблема при удалении последнего элемента из двусвязного списка. Вот код, где я добавляю элемент в конец...

Вылетает при удалении памяти - C++
У меня тут конфуз: class InversTree { struct element { double data; element *parent; ...

Освобождение памяти при удалении структуры - C++
Есть структура с указателем на блок памяти, если удалить структуру,память внутри структуры освободится или же надо освободить память внутри...

Освобождение выделенной памяти при закрытии программы - C++
Добрый вечер. Подскажите, при закрытии программы, вся память что была выделена внутри программы освобождается или нет?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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