Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
1

delete[]

18.07.2013, 16:37. Просмотров 2335. Ответов 28
Метки нет (Все метки)

подскажите пожалуйста как заставить это работать?
Вылетает на строчке delete[].
Выделяю ведь память с помощью оператора new.
А в идеале нужно сделать так чтобы была отдельная ф-я типа:

C++
1
2
3
4
void deleteStr()
{
delete[] string;
}
подскажите пожалуйста и я наконец-то разберусь с этой темой)
Вот исходный код:
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
# include <iostream>
using namespace std;
 
class mString
{
private:
    char* string;
public:
    mString(char* string_)
    {
        int lenght_ = strlen(string_);
        string = new char[lenght_];
        string[lenght_] = '\0';
 
        for (int i = 0; i < lenght_; i++)
            string[i] = string_[i];
 
        delete [] string;
    }
};
 
int main(void)
{
    mString("12.34");
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 16:37
Ответы с готовыми решениями:

Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Помогите ответить на вопрос, не могу понять суть вопроса (правильно ли понимаю, что будет если...

Какая разница между delete и delete[]
Нашел информацию на разных сайтах и всё равно остались вопросы. Я понимаю, что delete используется...

В чем разница между delete и delete[]?
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete...

Чем отличается delete[] от delete?
чем отличается? delete mas от delete mas

28
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 16:55 21
Цитата Сообщение от PakistanCode Посмотреть сообщение
Только проблема в том, что мне постоянно нужно будет удалять и выделять память.
если тебе постоянно нужно выделять и удалять память тем более под строку
может проще воспользоваться типом string?
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
18.07.2013, 16:58  [ТС] 22
ValeryS, проблема в том что:
0
Миниатюры
delete[]  
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 16:58 23
Цитата Сообщение от PakistanCode Посмотреть сообщение
~mString()
{
if (string) delete [] string;
}
лишнее это
можно так
C++
1
delete [] string;
для нулевого указателя delete ничего не делает
Цитата Сообщение от PakistanCode Посмотреть сообщение
delete [] string;
string = 0;
для указателей лучше использовать NULL и самому понятнее и другим
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
18.07.2013, 17:11 24
ValeryS,
C++
1
2
string = 0;
delete [] string;
Сработает нормально, серьезно? Никаких исключений?
0
Грамотный. Безпорно.
16852 / 9747 / 1878
Регистрация: 27.09.2012
Сообщений: 24,152
Записей в блоге: 2
18.07.2013, 17:15 25
Цитата Сообщение от nexen Посмотреть сообщение
Сработает нормально, серьезно? Никаких исключений?
Серьезно
Цитата Сообщение от 5.3.5
In the second alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer value that resulted from a previous array new-expression.If not, the behavior is undefined.
1
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 17:20 26
Цитата Сообщение от nexen Посмотреть сообщение
Сработает нормально, серьезно?
не ненормально утечка будет
а вот такое сработает

C++
1
2
3
delete [] string;
string = NULL;
delete [] string;
ты с free, то не путай
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
18.07.2013, 18:44 27
Цитата Сообщение от ValeryS Посмотреть сообщение
ты с free, то не путай
а что free ведет себя как-то иначе?
0
Модератор
Эксперт по электронике
8275 / 6134 / 822
Регистрация: 14.02.2011
Сообщений: 21,334
18.07.2013, 19:09 28
Цитата Сообщение от Tulosba Посмотреть сообщение
а что free ведет себя как-то иначе?
та ххто его знает
я с нем толком не работал, но в книжках говорят проверять указатель
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
18.07.2013, 19:15 29
Цитата Сообщение от ValeryS Посмотреть сообщение
та ххто его знает
я с нем толком не работал, но в книжках говорят проверять указатель
Не надо проверять, free(NULL) ничего не делает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 19:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Delete или delete []
Здравствуйте. Написал программу которая создает динамический массив, заполняемый нулями и выводит...

delete[] *pointer vs. delete pointer и утечка памяти
Здравствуйте! Есть класс &quot;умного&quot; указателя counted_ptr, который удаляет хранящийся в нём T*...

"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"?
Я правильно понимаю, что &quot;delete a, b;&quot; эквивалентно &quot;delete a; delete b;&quot; ?

new и delete
как лучше очищать память? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; //как лучще очищать...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

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