Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
1

Выделение памяти в отдельной функции

16.03.2012, 12:51. Показов 3011. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите выделить память в отдельной функции и очистить тоже
Язык Си

вот выделяется так в мейне,как сделать в виде отдельной функции?

C
1
2
3
4
5
math = (int**)malloc(m*sizeof(int));
         for (x1 = 0;x1<m;x1++)
          {
            math[x1] = (int*)malloc(n*sizeof(int));
          }
Типа такого что то только рабочее))
C
1
2
3
4
5
6
7
8
9
10
int **free_mem(int **math,int m, int n)
{
     int x1;
     math = (int**)malloc(m*sizeof(int));
         for (x1 = 0;x1<m;x1++)
          {
            math[x1] = (int*)malloc(n*sizeof(int));
          }  
          return math;
}
и в мейне поставить где оно было

C
1
free_mem(math,m,n);
не работает,помогите сделать.

Тоже самое с очисткой

C
1
2
3
4
5
for (x1 = 0;x1<m;x1++)
          {
            free(math[x1]);
          }
free(math);
Добавлено через 12 минут
или хотя бы пример скиньте
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2012, 12:51
Ответы с готовыми решениями:

Выделение памяти в отдельной функции
Как эти 3 строчки занести в отдельную функцию a = (double **)malloc(n*sizeof(double)); b =...

Выделение памяти в отдельной функции
Вот функция и указатель, который объявлен глобально. Вопрос: если не вызывать функцию, память...

Динамическое выделение памяти в отдельной функции
Здрасьте! Мне необходимо динамически выделить память в отдельной функции, заполнить ее, и...

Выделение памяти под массив в отдельной функции
#include&lt;stdio.h&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; void memory(int **a,int n,int m); void...

2
3565 / 2712 / 347
Регистрация: 11.03.2009
Сообщений: 6,246
17.03.2012, 02:06 2
Если под Ваш вариант функции, то вызов должен быть таким
C
1
math = free_mem(math,m,n);
0
Заблокирован
17.03.2012, 02:33 3
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void **init_mem ( const int m, const int n, size_t pp_size, size_t p_size ) {
 
    int i = 0;
    void **tmp;
 
    if ( !( tmp = ( void** ) malloc( m * pp_size ) ) )
        exit( EXIT_FAILURE );
 
    while ( i < m ) {
        if ( !( tmp[ i ] = ( void* ) malloc ( n * p_size ) ) )
            exit( EXIT_FAILURE );
 
        ++i;
    }
 
    return tmp;
}
 
void free_mem ( int **matr, const int m, const int n ) {
 
    int i = 0;
 
    while ( i < m )
        free( matr[ i++ ] );
 
    free( matr );
}
 
void init ( int **matr, const int m, const int n ) {
 
    int i = 0, j;
 
    while ( i < m ) {
 
        j = 0;
        
        while ( j < n ){
            matr[ i ][ j ] = rand() % 10;
            ++j;
        }
 
        ++i;
    }
}
 
void print_matr ( int **matr, const int m, const int n ) {
 
    int i, j;
 
    for ( i = 0; i < m; ++i ) {
        
        for ( j = 0; j < n; ++j )
            printf( "%3i", matr[ i ][ j ] );
            
        puts("");
    }
}
 
int main ( void )
{
    const int size = 5;
    int **matr;
    
    srand( time( NULL ) );
    matr = init_mem( size, size, sizeof( int** ), sizeof( int* ) );
    init( matr, size, size );
    print_matr( matr, size, size );
    free_mem( matr, size, size );
    
    exit( EXIT_SUCCESS );
}
Memcheck
==8528== Memcheck, a memory error detector
==8528== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==8528== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==8528== Command: ./blabla
==8528==
6 2 6 5 2
7 4 9 2 8
0 9 0 9 3
0 0 2 4 9
0 3 2 8 7
==8528==
==8528== HEAP SUMMARY:
==8528== in use at exit: 0 bytes in 0 blocks
==8528== total heap usage: 6 allocs, 6 frees, 120 bytes allocated
==8528==
==8528== All heap blocks were freed -- no leaks are possible
==8528==
==8528== For counts of detected and suppressed errors, rerun with: -v
==8528== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 6)
1
17.03.2012, 02:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2012, 02:33
Помогаю со студенческими работами здесь

Можно ли записать в виде отдельной функции выделение памяти под массив?:
Можно ли записать в виде отдельной функции выделение памяти под массив?: a = (int **) malloc (n...

Освобождение памяти в отдельной функции
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; void delmem(int ***a,int **q,int **s,int n); void main()...

Перераспределение памяти в отдельной функции
Добрый день! Имею некое недопонимание с указателями/адресами в C/C++. Имеется некий код: #...

Выделение памяти массиву структур в функции
Добрый день. Программа работает с записями, в виде массива структур: #define STRLENGTH 20 ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru