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

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

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

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

05.03.2013, 20:57. Просмотров 442. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Освобождение памяти (C++):

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

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

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

Освобождение памяти - C++
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct _MyData { int val1; ...

Освобождение памяти - C++
Есть класс дроби с перегруженным оператором приведения к char * Fraction::operator char*() { char num=&quot;&quot;; char denom=&quot;&quot;; ...

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

8
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
05.03.2013, 21:05 #2
строка 30
C++
1
sa.str = new char[Size];
0
kuli4ok
32 / 32 / 3
Регистрация: 10.10.2012
Сообщений: 88
05.03.2013, 21:08 #3
Надо написать функцию для удаления памяти из под строки в структуре и вызывать ее до delete. (могу ошибаться, первое что пришло в голову)
0
Кудаив
329 / 406 / 24
Регистрация: 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 / 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;
}
0
Кудаив
329 / 406 / 24
Регистрация: 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 / 0
Регистрация: 29.01.2013
Сообщений: 47
05.03.2013, 21:11  [ТС] #7
Кудаив, я пробовал с sa.str = new char[strlen(sb)+1], все тоже самое.
0
Кудаив
329 / 406 / 24
Регистрация: 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 / 0
Регистрация: 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++
Собственно есть простенький класс class Human { public: Human ( ); void ptintHuman(); private: static long...

Освобождение памяти - C++
Добрый день. Пишу в рубрику &quot;Вопросы начинающих по С/С++&quot; посему вопрос глупый :) И все же, есть такой код //offset - массив...

с++ Освобождение памяти - C++
Здравствуйте, объявляю в классе: А ** а; Далее выделяю память в функции: а=0; a = new A*; for(uint i=0;i&lt;5;++i) { a =...

Освобождение памяти - C++
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и деструктор класса image_bmp? class image { public:...


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

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

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