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

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

Войти
Регистрация
Восстановить пароль
 
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
#1

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

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

Освобождение памяти - C++
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete освобождаю память, но у меня вылетает ошибка...

Правильное освобождение памяти - C++
Есть код class Test { public: int **container; int counter = 0; Test(unsigned int size) { container = new int*;

Освобождение памяти со структурой - C++
Всем привет. Есть структура: struct ClientInfo { const char* szUid; const char* szName; const char* szSurname;

Освобождение невыделенной памяти - C++
У меня по коду выполняются такие операторы: index_load = new __int64 *; далее следует delete index_load; И после второго возникает...

Освобождение динамической памяти в vs - C++
Вообщем попался я тут, и так, код: //#define _CRT_SECURE_NO_WARNINGS добавить в vs #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Проясните освобождение памяти - C++
Допустим есть такой код: typedef struct COORDINATE { QVector&lt;int&gt; x; QVector&lt;int&gt; y; QVector&lt;int&gt; z; } Coordinate; ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 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,165
Завершенные тесты: 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
326 / 325 / 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,165
Завершенные тесты: 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,165
Завершенные тесты: 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++
Доброго времени суток. Пишу класс по ООП, и назрел один вопрос, связанный с моментом выделения и освобождения памяти. class SOK { ...

Массив, освобождение памяти - C++
что я сделал не так? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; ...

Освобождение памяти delete - C++
Если у меня есть указатель (pt) N-ой степени, я присвоил ему указатель на начало массива (N - 1)ой степени (через new), затем некоторому...

Освобождение памяти и указатели - C++
int **Matrix1 = new int*; // Создаем 1-ю матрицу for (int i(0); i &lt; N1; i++) Matrix1 = new int; Подскажите пожалуйста, как...

Освобождение памяти в классах - C++
Программа работает правильно но при завершении выдает ошибку! Ошибка на деструкторе! Пожалуйста объясните почему! Спасибо! #ifndef...


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

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

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