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

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

Войти
Регистрация
Восстановить пароль
 
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 96
Завершенные тесты: 1
#1

Потеря памяти - C++

04.04.2013, 21:40. Просмотров 410. Ответов 4
Метки нет (Все метки)

Здравия желаю!

Вопрос: Возможна ли такая конструкция?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<conio.h>
using namespace std;
char *a(void)
{
    char *s=new char[2];
    s[0]='3';s[1]='\0';
    return s;
}
int main(void)
{
    char *n=a();
    cout<<n;
    delete []n;
    _getch();
    return 0;
}
Если да, будет ли потеря значения после завершения функции a()?

Добавлено через 1 час 2 минуты
Проверил на свой страх и риск - конструкция работает. Сохраняется значение до освобождения памяти delete'ом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 21:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потеря памяти (C++):

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

Потеря точности у double - C++
Салют! Ситуация следующая - есть необходимость работать с изображением, а точнее - с его градиентом/направлением градиента. Для...

Потеря данных в string - C++
Здравствуйте, у меня возникла проблема со string a: когда я ввожу значение слова через код, то программа работает, а если через cin, т.е...

Потеря значений указателя - C++
Вообщем столкнулся с интересной проблемой. При добавлении больше одного значения, на строке 123-124 значения указателя выводятся корректно,...

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

Мистическая потеря итераций цикла - C++
#include &lt;iostream&gt; using namespace std; void shift( int * array, int direct, int n ); void print( int * array, int n ); ...

4
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2013, 21:45 #2
Все корректно, но так делать не стоит. В смысле возвращать указатель на выделенную память в надежде, что юзер освободит ее сам.
0
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 96
Завершенные тесты: 1
04.04.2013, 21:54  [ТС] #3
Но вопрос остался:

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
27
#include<iostream>
#include<conio.h>
using namespace std;
 
char *cpy(char *b)
{
    char *s=new char[strlen(b)+1];
    for(int i=0;i<strlen(b)+1;i++)s[i]=b[i];
    return s;
}
 
int main(void)
{
    char *n=new char[11];   //Выделяется память на массив из 11 элементов типа char
    
    //Заполняется цифрами
    for(int i=0;i<10;i++)
        n[i]=i+48;
    n[10]='\0';
 
    n=cpy("Hello!");        //Указатель стал ссылаться на другой участок памяти
    //Была ли утечка, или память из-под цифр освободилась?
    cout<<n;
    delete []n;
    _getch();
    return 0;
}
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2013, 22:00 #4
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Была ли утечка
Была, так как не было явного delete. Если хотите, чтобы указатели освобождали память сами, то посмотрите в сторону умных указателей.
1
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 96
Завершенные тесты: 1
04.04.2013, 22:07  [ТС] #5
Благодарю. *Пошел изучать умные указатели*
0
04.04.2013, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 22:07
Привет! Вот еще темы с ответами:

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

Потеря указателя на корень дерева - C++
Всем доброго времени суток. У меня есть функция вставки структуры в АВЛ дерево, но при его печати оказывается, что дерево пусто и корень...

Потеря значения в виртуальной функции - C++
Подскажите что не так, вывод должен быть 1 и 5. class cBase { public: int i, f; virtual void addI() { i = 0; f = 5; ...

Потеря точности числа формата double - C++
Вечер добрый, товарищи. Вопрос следующий: как можно избежать потери точности при перемножении двух чисел типа double? В каждом числе,...


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

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

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