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

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

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

Ошибка освобождения памяти new/delete - C++

15.12.2013, 22:31. Просмотров 344. Ответов 6
Метки нет (Все метки)

При выполнении оператора delete[]rez вылетает ошибка BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

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
#include <iostream>
using namespace std;
 
class Soed {
public:
    char str1[40],str2[10];
    char* SS (char *str1,char *str2){strcat(str1,str2); return str1;}
    Soed(){}
    ~Soed(){}
};
int main(){
Soed first;
 
gets(first.str1);
gets(first.str2);
 
char* rez=new char[50]; 
rez=first.SS(first.str1,first.str2);
puts(rez);
 
 
delete[] rez;
 
return 0;
}
Пробовал другой вариант:
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
#include <iostream>
using namespace std;
 
class Soed {
    char str1[40],str2[10],*str3;
public:
    void set_str1(){gets(str1);}
    void set_str2(){gets(str2);}
    char get_str1(){return str1[40];}
    char get_str2(){return str2[10];}
    char*get_str3(){return str3;}
    void disp_str3(){puts(str3);}
    void cat(){ str3=strcat(str1,str2); }
    Soed(){str3=new char[40];}
    ~Soed(){delete[40]str3;}
};
int main(){
Soed first;
first.set_str1();
first.set_str2();
first.cat();
first.disp_str3();
return 0;
}
Тоже самое. Подскажите пожалуйста, буду крайне благодарен, а то целый день сижу уже гуглю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2013, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка освобождения памяти new/delete (C++):

Проверка освобождения памяти (new, delete) - C++
Всем привет. Программы помаленьку становятся сложнее. Появляются самодельные контейнеры внутри других самодельных контейнеров внутри...

Ошибка при освобождении памяти (delete) - C++
Здравствуйте! Есть массив lines, созданный вот так : int *line = new int ; Потом, пытаюсь его удалить и пересоздать : delete...

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

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

Стратегия выделения/освобождения памяти - C++
здравствуйте господа. есть такой вопрос. пусть есть класс например Bitmap - несжатое растровое изображение. Пусть необходимо уметь...

Деструкторы, аналоги освобождения памяти - C++
Доброго времени суток. Возник следующий вопрос. Какие, помимо деструкторов, способы очистки памяти существуют. Спасибо за уделенное...

6
Croessmah
Эксперт CЭксперт С++
13427 / 7582 / 856
Регистрация: 27.09.2012
Сообщений: 18,674
Записей в блоге: 3
Завершенные тесты: 1
15.12.2013, 22:34 #2
Кто будет инициализировать значения в массивах?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.12.2013, 22:35 #3
Если (в первом варианте) вот это закоментировать, то ошибка исчезает?
C++
1
2
rez=first.SS(first.str1,first.str2);
puts(rez);
1
fobos362
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 4
15.12.2013, 22:40  [ТС] #4
Если (в первом варианте) вот это закоментировать, то ошибка исчезает?
Код C++
1
2
rez=first.SS(first.str1,first.str2);
puts(rez);
Исчезает) Почему??
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.12.2013, 22:40 #5
После этого:
C++
1
rez=first.SS(first.str1,first.str2);
rez на массив на стеке указывает (str1).
1
fobos362
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 4
15.12.2013, 22:43  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
После этого:
C++
1
rez=first.SS(first.str1,first.str2);
rez на массив на стеке указывает (str1).
А как это вылечить??) Я вообще когда инициализирую этот указатель, даже так rez="ertert"; то всё равно ошибку выдаёт!
0
alsav22
15.12.2013, 22:47     Ошибка освобождения памяти new/delete
  #7

Не по теме:

Цитата Сообщение от fobos362 Посмотреть сообщение
А как это вылечить??
Сесть и подумать... О классе Soed, о себе...

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2013, 22:47
Привет! Вот еще темы с ответами:

Указатель после освобождения памяти - C++
Стивен Прата, глава 4, раздел &quot;Освобождение памяти с помощью операции delete&quot; Я пытаюсь понять. Написал: #include &lt;iostream&gt; ...

Нюансы выделения и освобождения памяти (структуры) - C++
struct point { int a; point *next; } point *p=new point Я освобожу всю память которая отводилась под динам. структуру? delete...

Переполнение стека во время освобождения памяти - C++
Здравствуйте! СТолкнулся с такой проблемой, что при работе деструктора программа аварийно завершается, а в дебаггере появляется сообщение о...

Функциии динамического выделения и освобождения памяти - C++
Необходим написать функции выделения и освобождения памяти под двумерный динамический массив. Причем освобождение должн быть не сразу для...


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

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

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