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

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

Восстановить пароль Регистрация
 
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
04.04.2013, 21:40     Потеря памяти #1
Здравия желаю!

Вопрос: Возможна ли такая конструкция?
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'ом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2013, 21:45     Потеря памяти #2
Все корректно, но так делать не стоит. В смысле возвращать указатель на выделенную память в надежде, что юзер освободит ее сам.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
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;
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.04.2013, 22:00     Потеря памяти #4
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
Была ли утечка
Была, так как не было явного delete. Если хотите, чтобы указатели освобождали память сами, то посмотрите в сторону умных указателей.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
04.04.2013, 22:07  [ТС]     Потеря памяти #5
Благодарю. *Пошел изучать умные указатели*
Yandex
Объявления
04.04.2013, 22:07     Потеря памяти
Ответ Создать тему
Опции темы

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