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

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

Восстановить пароль Регистрация
 
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
02.04.2013, 13:57     Ошибка при удалении динамически выделенной памяти #1
Добрый день, хочу удалить выделенный массив, но выдает ошибку.
Вот собственно код создаваемой функции.
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;
    }
}
Миниатюры
Ошибка при удалении динамически выделенной памяти  
Вложения
Тип файла: zip Source.zip (1.4 Кб, 1 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hofmn
Helter Skelter
 Аватар для hofmn
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;" удалить 
}
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.04.2013, 14:14     Ошибка при удалении динамически выделенной памяти #3
Цитата Сообщение от vadim09 Посмотреть сообщение
int length= strlen(buff)+1;
У тебя buff не указывает гарантированно на С-строку. Значение length у тебя не определено и может быть больше, чем размер выделенного буфера. А может и не быть. И баф удаляешь несколько раз.
vadim09
6 / 6 / 1
Регистрация: 04.08.2012
Сообщений: 62
04.04.2013, 21:38  [ТС]     Ошибка при удалении динамически выделенной памяти #4
Цитата Сообщение от Vourhey Посмотреть сообщение
И баф удаляешь несколько раз.
Ошибку выдает на первом удалении. А причем тут length?
Я с buff ничего не делал. Только записал в него строку и всё.
Так что же делать?
Yandex
Объявления
04.04.2013, 21:38     Ошибка при удалении динамически выделенной памяти
Ответ Создать тему
Опции темы

Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru