Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 16.02.2011
Сообщений: 47
1

Вектор, утечка памяти, функция создания и выделение памяти

04.11.2012, 01:44. Показов 1519. Ответов 5
Метки нет (Все метки)

Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при выходе из нее указатель теряется. Или не знаю, что он делает
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
#include<stdio.h>
#include<stdlib.h>
#define STEP 5
typedef struct 
        {
            int*arr;
            int capacity;
            int size;
        } VECTOR;
 
void CreateVector(VECTOR*);
 
int main()
{
    VECTOR *myv;
    CreateVector(myv);
    return 0;
}
 
void CreateVector(VECTOR*v)
{
    v=(VECTOR*)malloc(sizeof(VECTOR));
    v->arr=(int*)malloc(STEP*sizeof(int));
    v->capacity=STEP;
    v->size=0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2012, 01:44
Ответы с готовыми решениями:

Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде...

Вектор и выделение памяти
Возможно ли изменить коэффициент выделения памяти, без написания собственного аллокатора?

HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти
Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка...

Утечка памяти. Функция работы с изображениями выполняется в стороннем потоке.
Доброго времени суток! Не могу решить проблему(( Есть функция работы с изображениями и выполняется...

__________________
5
349 / 299 / 164
Регистрация: 15.03.2012
Сообщений: 649
Записей в блоге: 1
04.11.2012, 02:21 2
Так работает.
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
#include<stdio.h>
#include<stdlib.h>
#define STEP 5
struct VECTOR
        {
            int*arr;
            int capacity;
            int size;
        };
 
struct VECTOR *CreateVector(void);
 
int main()
{
    int i;
    struct VECTOR *myv;
    myv = CreateVector();
    for (i=0; i<STEP; ++i)
        myv->arr[i] = i;
    puts("mzy");
    for (i=0; i<STEP; ++i)
        printf("%i ", myv->arr[i]);
    printf("\ncapacity %i\n", myv->capacity);
    printf("size %i\n", myv->size);
    free(myv);
    return 0;
}
 
struct VECTOR *CreateVector(void)
{
    struct VECTOR *v;
    v=(struct VECTOR*)malloc(sizeof(struct VECTOR));
    v->arr=(int*)malloc(STEP*sizeof(int));
    v->capacity=STEP;
    v->size=0;
    return v;
}
1
0 / 0 / 0
Регистрация: 16.02.2011
Сообщений: 47
04.11.2012, 09:04  [ТС] 3
СашаН, спасибо. Есть еще вопрос.
C
1
2
3
4
void AddElement(VECTOR*v,int el)
{
    if(v->capacity>v->size) v->arr+v->size=&el;
}
как правильно сделать смещение? Если бы не указатель на структуру, то можно было бы спокойно использовать
C
1
*(arr+size)=el;
но тут v-> все усложняет
0
349 / 299 / 164
Регистрация: 15.03.2012
Сообщений: 649
Записей в блоге: 1
04.11.2012, 12:27 4
А что такое el?
Это что вообще такое, массив структур или линейный список, не пойму?
0
0 / 0 / 0
Регистрация: 16.02.2011
Сообщений: 47
04.11.2012, 12:57  [ТС] 5
СашаН, вектор. бесконечный динамический массив. кажется нечто подобное есть в библиотеке stl на с++
0
~ Эврика! ~
1254 / 1003 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 13:36 6
Цитата Сообщение от DdarkSideE Посмотреть сообщение
как правильно сделать смещение?
А у вас есть другие варианты, кроме v->arr[v->size] = el? Это правильный, простой и понятный вариант.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2012, 13:36

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор
Скажите правильно ли я выделяю и очищаю память под двухмерный вектор class A { private: ...

Стек, куча, хранение в памяти, динамическое выделение памяти, указатели в чем отличие?
Здравствуйте. Прочитал кучу определений но никак не пойму вообще что к чему. 1)Стек - это якобы...

Функция malloc() динамически увеличивает выделение памяти по мере необходимости?
Допустим, задаю malloc(3). Т.е. 3 байта. А переменная (точнее, массив, который получается...

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки...


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

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

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