Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
underwaterspace
2 / 2 / 1
Регистрация: 29.01.2013
Сообщений: 47
1

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

05.03.2013, 20:57. Просмотров 476. Ответов 8
Метки нет (Все метки)

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, без него все хорошо. Подскажите, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 20:57
Ответы с готовыми решениями:

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления...

Освобождение памяти
Есть класс дроби с перегруженным оператором приведения к char *...

Освобождение памяти в C++
Добрый день! В моей программе в функции выделяется память (new char) под...

Освобождение памяти
Добрый день. Подскажите пожалуйста, почему возникает ошибка при уничтожение...

с++ Освобождение памяти
Здравствуйте, объявляю в классе: А ** а; Далее выделяю память в функции: ...

8
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
05.03.2013, 21:05 2
строка 30
C++
1
sa.str = new char[Size];
0
kuli4ok
32 / 32 / 17
Регистрация: 10.10.2012
Сообщений: 88
05.03.2013, 21:08 3
Надо написать функцию для удаления памяти из под строки в структуре и вызывать ее до delete. (могу ошибаться, первое что пришло в голову)
0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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;
}
указатель в структуре будет указывать на строку создаваемую в майне
0
SummerRain
327 / 326 / 92
Регистрация: 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;
}
0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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;
}
1
underwaterspace
2 / 2 / 1
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 21:11  [ТС] 7
Кудаив, я пробовал с sa.str = new char[strlen(sb)+1], все тоже самое.
0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
05.03.2013, 21:15 8
Цитата Сообщение от underwaterspace Посмотреть сообщение
Кудаив, я пробовал с sa.str = new char[strlen(sb)+1], все тоже самое.
копировал строки strcpy или как в приведённом тобой коде?
0
underwaterspace
2 / 2 / 1
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 21:21  [ТС] 9
Кудаив, сначала приравнивал, как в моем коде. Уже который раз забываю со строками в char использовать strcpy, благодарю.
0
05.03.2013, 21:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 21:21

Освобождение памяти в c++
Привет, помогите разобраться с освобождением памяти в c++. Я так понимаю, что...

Освобождение памяти
Есть многопоточное приложение. Создается глобальная структура: Пример из...

освобождение памяти
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь...


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

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

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