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

Освобождение памяти - C++

Восстановить пароль Регистрация
 
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 20:57     Освобождение памяти #1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<cstring>
using namespace std;
struct stringy{
    char * str;
    int ct;
};
stringy & set(stringy & sa,char sb[]);
void show(char*,int n=1);
void show(stringy &,int n=1);
int main()
{
    setlocale(LC_CTYPE,"russian");
    stringy beany;
    char testing[]="Reality isn't what it used to be.";
    set(beany,testing);
    show(beany);
    show(beany,2);
    testing[0]='D';
    testing[1]='u';
    show(testing);
    show(testing,3);
    show("DONE!");
    system("PAUSE");
    delete [] beany.str;
    return 0;
}
stringy & set(stringy & sa,char sb[])
{
    sa.str=new char;
        sa.str=sb;
    sa.ct=strlen(sb);
    return sa;
}
void show(char* a,int n)
{
    int i;
    for(i=0;i<n;i++)
        cout<<a<<endl;
}
void show(stringy & a,int n)
{
    int i;
    for(i=0;i<n;i++)
        cout<<a.str<<endl;
}
Ругается, если использовать delete, без него все хорошо. Подскажите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 20:57     Освобождение памяти
Посмотрите здесь:

C++ Освобождение памяти
C++ Освобождение памяти
C++ освобождение памяти
с++ Освобождение памяти C++
C++ Освобождение памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
05.03.2013, 21:05     Освобождение памяти #2
строка 30
C++
1
sa.str = new char[Size];
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
05.03.2013, 21:08     Освобождение памяти #3
Надо написать функцию для удаления памяти из под строки в структуре и вызывать ее до delete. (могу ошибаться, первое что пришло в голову)
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
05.03.2013, 21:09     Освобождение памяти #4
либо динамически не выделяешь память оставляешь
C++
1
2
3
4
5
6
stringy & set(stringy & sa,char sb[])
{
    sa.str=sb;
    sa.ct=strlen(sb);
    return sa;
}
указатель в структуре будет указывать на строку создаваемую в майне
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
05.03.2013, 21:09     Освобождение памяти #5
вот работающий код, в функции set не нужно динамически выделять память, т.к. вы возвращаете не локальный объект, а обработанный аргумент этой функции
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<cstring>
using namespace std;
struct stringy{
    char * str;
    int ct;
};
stringy & set(stringy & sa,char sb[]);
void show(char*,int n=1);
void show(stringy &,int n=1);
int main()
{
    setlocale(LC_CTYPE,"russian");
    stringy beany;
    char testing[]="Reality isn't what it used to be.";
    set(beany,testing);
    show(beany);
    show(beany,2);
    testing[0]='D';
    testing[1]='u';
    show(testing);
    show(testing,3);
    show("DONE!");
    system("PAUSE");
    //delete [] beany.str;
    return 0;
}
stringy & set(stringy & sa,char sb[])
{
    //sa.str=new char;
        sa.str=sb;
    sa.ct=strlen(sb);
    return sa;
}
void show(char* a,int n)
{
    int i;
    for(i=0;i<n;i++)
        cout<<a<<endl;
}
void show(stringy & a,int n)
{
    int i;
    for(i=0;i<n;i++)
        cout<<a.str<<endl;
}
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
05.03.2013, 21:10     Освобождение памяти #6
либо выделяешь память
C++
1
2
3
4
5
6
7
8
stringy & set(stringy & sa,char sb[])
{
    sa.ct=strlen(sb);
    sa.str=new char[sa.ct];
    strcpy( sa.str, sb);
    
    return sa;
}
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 21:11  [ТС]     Освобождение памяти #7
Кудаив, я пробовал с sa.str = new char[strlen(sb)+1], все тоже самое.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
05.03.2013, 21:15     Освобождение памяти #8
Цитата Сообщение от underwaterspace Посмотреть сообщение
Кудаив, я пробовал с sa.str = new char[strlen(sb)+1], все тоже самое.
копировал строки strcpy или как в приведённом тобой коде?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 21:21     Освобождение памяти
Еще ссылки по теме:

C++ Освобождение памяти в C++
C++ Освобождение памяти в c++
Освобождение памяти C++

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

Или воспользуйтесь поиском по форуму:
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 21:21  [ТС]     Освобождение памяти #9
Кудаив, сначала приравнивал, как в моем коде. Уже который раз забываю со строками в char использовать strcpy, благодарю.
Yandex
Объявления
05.03.2013, 21:21     Освобождение памяти
Ответ Создать тему
Опции темы

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