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

delete[] - C++

Восстановить пароль Регистрация
 
 
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
18.07.2013, 16:37     delete[] #1
подскажите пожалуйста как заставить это работать?
Вылетает на строчке 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 16:37     delete[]
Посмотрите здесь:

"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"? C++
C++ delete[]
new - delete C++
C++ new и delete
C++ delete this
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.07.2013, 16:55     delete[] #21
Цитата Сообщение от PakistanCode Посмотреть сообщение
Только проблема в том, что мне постоянно нужно будет удалять и выделять память.
если тебе постоянно нужно выделять и удалять память тем более под строку
может проще воспользоваться типом string?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
18.07.2013, 16:58  [ТС]     delete[] #22
ValeryS, проблема в том что:
Миниатюры
delete[]  
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.07.2013, 16:58     delete[] #23
Цитата Сообщение от PakistanCode Посмотреть сообщение
~mString()
{
if (string) delete [] string;
}
лишнее это
можно так
C++
1
delete [] string;
для нулевого указателя delete ничего не делает
Цитата Сообщение от PakistanCode Посмотреть сообщение
delete [] string;
string = 0;
для указателей лучше использовать NULL и самому понятнее и другим
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
18.07.2013, 17:11     delete[] #24
ValeryS,
C++
1
2
string = 0;
delete [] string;
Сработает нормально, серьезно? Никаких исключений?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11804 / 6783 / 767
Регистрация: 27.09.2012
Сообщений: 16,838
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 17:15     delete[] #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.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.07.2013, 17:20     delete[] #26
Цитата Сообщение от nexen Посмотреть сообщение
Сработает нормально, серьезно?
не ненормально утечка будет
а вот такое сработает

C++
1
2
3
delete [] string;
string = NULL;
delete [] string;
ты с free, то не путай
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.07.2013, 18:44     delete[] #27
Цитата Сообщение от ValeryS Посмотреть сообщение
ты с free, то не путай
а что free ведет себя как-то иначе?
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
18.07.2013, 19:09     delete[] #28
Цитата Сообщение от Tulosba Посмотреть сообщение
а что free ведет себя как-то иначе?
та ххто его знает
я с нем толком не работал, но в книжках говорят проверять указатель
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 19:15     delete[]
Еще ссылки по теме:

delete[] *pointer vs. delete pointer и утечка памяти C++
New/Delete C++
New delete C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
18.07.2013, 19:15     delete[] #29
Цитата Сообщение от ValeryS Посмотреть сообщение
та ххто его знает
я с нем толком не работал, но в книжках говорят проверять указатель
Не надо проверять, free(NULL) ничего не делает.
Yandex
Объявления
18.07.2013, 19:15     delete[]
Ответ Создать тему
Опции темы

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