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

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

Войти
Регистрация
Восстановить пароль
 
TraDy
Сообщений: n/a
#1

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

08.12.2013, 18:41. Просмотров 388. Ответов 9
Метки нет (Все метки)

Помогите, пожалуйста, с этой проблемой. Уже 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 18:41     Ошибка при удалении явно заданного указателя
Посмотрите здесь:

Об удалении указателя в деструкторе класса - C++
Изучаю C++, хочу уточнить вопрос об указателях... Например, есть такой код: class Obj { public: Obj() {}; ~Obj()...

Ошибка при удалении массива - C++
Проблема в том, что при попытке добавить строки удаления массивов программа вылетает, если же их нету, то всё стабильно. #include...

Ошибка при удалении динамического массива - C++
Доброго времени суток! ПРоблема заключается в том, что при попытке очистить память из под динамического массива вылетает ошибка &quot;access...

Ошибка при удалении из односвязного списка - C++
Написал код, но при удалении элемента из списка у которого есть значение 2 выдаёт ошибку. Помогите разобраться в чём проблема?? ...

Ошибка при удалении значения списка - C++
В строке 34, как только задействуется функция erase вылезает ошибка. #include &quot;iostream&quot; #include &lt;list&gt; using namespace std; ...

Ошибка при удалении динамического массива - C++
Добрый вечер! Ругается на HEAP CORRUPTION DETECTED в строке с delete vertex; В чём может быть дело? void read_stl (char*...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 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
5416 / 4812 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 21:12     Ошибка при удалении явно заданного указателя #6
Цитата Сообщение от alsav22 Посмотреть сообщение
делается попыка освобождения памяти, через delete, не в динамической области.
Или вообще не выделенной.
kazak
3034 / 2355 / 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
3034 / 2355 / 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++
Здравствуйте. Есть код готовый, рабочий с баззой данных. Ошибка вылетает(через раз) когда сначала добавляется элемент а потом...

Ошибка при удалении динамического массива - C++
Непонятная мне ошибка при удалении массива #include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; using std::cin; using...

Ошибка при удалении массива с помощью delete - C++
Изучаю C++ и у меня задание разбить текст неопределенной длинны на массив строк. Нацарапал класс типа string ниже выложу. В него задача...

Ошибка при удалении єлемента из однонаправленного списка - C++
Помогите исправить ошибку в функции удаления элемента из однонаправленного списка: void linklist::Del( double a) //а-элемент, который...


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

Или воспользуйтесь поиском по форуму:
DU
1482 / 1058 / 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     Ошибка при удалении явно заданного указателя
Ответ Создать тему
Опции темы

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