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

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

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

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

15.12.2013, 22:31. Просмотров 296. Ответов 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
Посмотрите здесь:

Не понимаю логики освобождения памяти C++
C++ Функциии динамического выделения и освобождения памяти
Деструкторы, аналоги освобождения памяти C++
C++ Не могу разобраться с указателями(не понимаю сути освобождения памяти)
Нюансы выделения и освобождения памяти (структуры) C++
C++ Переполнение стека во время освобождения памяти
C++ Ошибка при освобождении памяти (delete)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12534 / 7096 / 797
Регистрация: 27.09.2012
Сообщений: 17,508
Записей в блоге: 2
Завершенные тесты: 1
15.12.2013, 22:34     Ошибка освобождения памяти new/delete #2
Кто будет инициализировать значения в массивах?
alsav22
5411 / 4807 / 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
5411 / 4807 / 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
Ответ Создать тему
Опции темы

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