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

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

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

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

15.12.2013, 22:31. Просмотров 326. Ответов 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;
}
Тоже самое. Подскажите пожалуйста, буду крайне благодарен, а то целый день сижу уже гуглю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2013, 22:31     Ошибка освобождения памяти new/delete
Посмотрите здесь:

Проверка освобождения памяти (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++
Не могу понять каким образом освобождается память если ее ячейки всеравно заполнены, и более того в дальнейшем не используются.. ...

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

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

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

Не по теме:

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

Yandex
Объявления
15.12.2013, 22:47     Ошибка освобождения памяти new/delete
Ответ Создать тему
Опции темы

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