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

Ошибка при удалении явно заданного указателя - C++

Восстановить пароль Регистрация
 
TraDy
Сообщений: n/a
08.12.2013, 18:41     Ошибка при удалении явно заданного указателя #1
Помогите, пожалуйста, с этой проблемой. Уже 2 недели не могу сдать лабу
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
"main.cpp"
    char* a=new char[1024];
    char b=0;
    char* c=new char[1024];
    unsigned int d=0;
    int n;
    cout<<"Сколько будете вводить данных?"<<endl;
    n=ic();   //проверка на целое
    ant* inform=new ant[n];
    char* tmp=(char*)1;              // эту и след строчку дописал препод
    inform[0].get(tmp, b, tmp, d);  
 
//----------------------------------------------------------
 
"class.cpp"
void ant::get(char* &a,char &b,char* &c,unsigned int &d){
    if(a){
        delete [] a; // вот на этом программа запарывается
        char* a=new char[x+1];
    }
    strcpy(a, name);
    if(c){
        delete [] c;
        char* c=new char[y+1];
    }
    strcpy(c, habitat);
    b=group;
    d=population;
    return;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 18:56     Ошибка при удалении явно заданного указателя #2
Цитата Сообщение от TraDy Посмотреть сообщение
inform[0].get(tmp, b, tmp, d);
Почему tmp первым параметром? Через delete освобождается память, выделенная через new.
TrDy
0 / 0 / 0
Регистрация: 08.12.2013
Сообщений: 30
08.12.2013, 20:13     Ошибка при удалении явно заданного указателя #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Почему tmp первым параметром? Через delete освобождается память, выделенная через new.
tmp первым параметром, потому что так решил препод=) и память я освобождаю через delete, посмотри в методе get. именно на этом и вылетает ошибка

p.s. пришлось регнуть новый акк, зарегал не на тот ящик
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 21:02     Ошибка при удалении явно заданного указателя #4
Цитата Сообщение от TrDy Посмотреть сообщение
tmp первым параметром, потому что так решил препод=) и память я освобождаю через delete, посмотри в методе get.
Если так решил преподаватель, то переписывай метод. В чём тогда вопрос? Ошибка вылетает из-за того, что делается попыка освобождения памяти, через delete, не в динамической области.
kazak
08.12.2013, 21:10
  #5

Не по теме:

Цитата Сообщение от TrDy Посмотреть сообщение
tmp первым параметром, потому что так решил препод=)
Вдарьте его стулом по темечку, ибо не ведает он, что творит

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 21:12     Ошибка при удалении явно заданного указателя #6
Цитата Сообщение от alsav22 Посмотреть сообщение
делается попыка освобождения памяти, через delete, не в динамической области.
Или вообще не выделенной.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 21:14     Ошибка при удалении явно заданного указателя #7
Цитата Сообщение от TraDy Посмотреть сообщение
inform[0].get(tmp, b, tmp, d);
Когда препод писал это, он видел реализацию этого метода?
TrDy
0 / 0 / 0
Регистрация: 08.12.2013
Сообщений: 30
08.12.2013, 22:15     Ошибка при удалении явно заданного указателя #8
Цитата Сообщение от kazak Посмотреть сообщение
Когда препод писал это, он видел реализацию этого метода?
да, видел

я пытался сделать проверку на что-то подобное, но ничего не получилось. В группе кого ни спрошу, никто не понимает что с этим делать
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 23:14     Ошибка при удалении явно заданного указателя #9
Цитата Сообщение от TrDy Посмотреть сообщение
да, видел
Однако.
ИМХО, тут лучше для каждого поля класса отдельный get делать.

Добавлено через 43 секунды

Не по теме:

Про табуреточку все таки подумайте.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 23:16     Ошибка при удалении явно заданного указателя
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.12.2013, 23:16     Ошибка при удалении явно заданного указателя #10
до кучи, обратите внимание что у вас перекрываются переменные и будет происходить не совсем
то, чего вы хотели:
C++
1
2
3
4
5
6
7
8
9
10
 if(a){
        delete [] a; // вот на этом программа запарывается
 
        char* a=new char[x+1]; // новая локальная переменная a скрывает переменную из охватывающего скоупа.
 
       // должно быть:
       a=new char[x+1]; // локальная переменная a скрывает переменную из охватывающего скоупа.
    }
 
    //в других местах так же
Yandex
Объявления
08.12.2013, 23:16     Ошибка при удалении явно заданного указателя
Ответ Создать тему
Опции темы

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