Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532

Как заменить массив?

22.11.2021, 19:37. Показов 1881. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть функция, которая берет изначальный динамический двумерный массив и из него возвращает другой динамический двумерный массив. Можно ли присвоить старому указателю изначального массива новое значение из функции? При условии что новый массив обладает меньшим количеством столбцов.

Добавлено через 29 минут
По-другому, как записать массив полученный из функции в переменную из main()?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2021, 19:37
Ответы с готовыми решениями:

Как заменить двухмерный массив одномерным
Финансовая деятельность каждой с n-фирм задается в виде одномерного массива размерностью m элементов(положительные элементы - доходы,...

Как заменить текущий массив на статический?
Помогите пожалуйста, не могу понять как мне поменять текущий массив на статический и сделать ввод numb с клавиатуры #include...

Как в BFS массив заменить на std::map?
Привет! Есть алгоритм поиска пути между всех двух стартовых вершин. Он работает у меня, но не проходят по времени тесты. Для того что бы...

33
фрилансер
 Аватар для Алексей1153
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,343
22.11.2021, 21:10
Студворк — интернет-сервис помощи студентам
Miryz, так m1 - это же копия указателя A
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2021, 21:15
Цитата Сообщение от Miryz Посмотреть сообщение
вы про m1 или A? Если A, то я не могу прикинуть как его можно освободить в теле функции вне main()
Это же все указатели и вы их передаете один в другой, значит получается **A == **m1. Поэтому ничего не мешает освободить память в любом месте и в любой функции. И кстати, для двумерного массива, освобождение памяти типа free(A); у вас не верное.
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 21:16  [ТС]
Алексей1153,
Цитата Сообщение от Алексей1153 Посмотреть сообщение
так m1 - это же копия указателя A
если я очищу m1, то я очищу и старый A?

Добавлено через 39 секунд
Цитата Сообщение от мама Стифлера Посмотреть сообщение
free(A); у вас не верное.
подскажите пожалуйста правильное написание
0
фрилансер
 Аватар для Алексей1153
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,343
22.11.2021, 21:17
Miryz, да, только не "очищу m1" , а "освобожу память по указателю m1"
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 21:18  [ТС]
Алексей1153, справедливое замечание
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2021, 21:19
Алексей1153, должен остаться один, иначе ТС в корень запутается, ну и вы грамотней гораздо. Удаляюсь )))
1
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 21:22  [ТС]
Алексей1153,
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Miryz, да, только не "очищу m1" , а "освобожу память по указателю m1"
если я освободил память по указателю m1 и A соответсвенно, а потом написал, что A = m2, то A - копия указателя m2?
0
фрилансер
 Аватар для Алексей1153
6501 / 5732 / 1134
Регистрация: 11.10.2019
Сообщений: 15,343
22.11.2021, 21:22
мама Стифлера, да нет, разбирайся давай Не буду встревать
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2021, 21:26
Цитата Сообщение от Miryz Посмотреть сообщение
подскажите пожалуйста правильное написание
ну вот самый первый пост, все верно там, кроме строки 7 Освобождение памяти для двумерного массива
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 21:29  [ТС]
Алексей1153, ну если указатель остался без памяти, то моя программа бы не заработала, значит этот указатель к тому же массиву. У меня такая логическая цепочка.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2021, 21:41
Я не понимаю что должна делать функция, но вот я смотрю на нее и вижу:
Кликните здесь для просмотра всего текста
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
int** deln(int x, int y, int l, int* n, int** m1){
 
    int i, j, q, merr2;
    int **m2;
    merr2 = 0;
 
    if ((m2 = (int**)malloc(x*sizeof(int))) != NULL){
        for (i=0; i<x; i++){
            if ((m2[i] = (int*)malloc(l*sizeof(int))) == NULL){
                merr2 = 1;
            }
        }
        if (merr2 == 0){
            j = 0;
            for (q=0; q<y; q++){
                if (n[q]){
                    for (i=0; i<x; i++){
                        m2[i][j] = m1[i][q];
                    }
                    j++;
                }
            }
            return m2;
        }
    }
    return m1;
}
 
 
void output(int x, int y, int** m){
    int j;
    for (j=0;j<y;j++){
        printf("%d ", m[x][j]);
    }
    puts("");
}
 
 
int main(){
    int x, y, i, j, l, k, mel, flag, merr1;
    int *n;
    int **A;
 
    merr1 = 0;
    puts("Enter the number of lines:");
    scanf("%d", &x);
    puts("Enter the length of lines:");
    scanf("%d", &y);
 
    if((A = (int**)malloc(x*sizeof(int))) != NULL){
        for (i=0; i<x; i++){
            j = 0;
            mel = 0;
            flag = 1;
            if ((A[i] = (int*)malloc(y*sizeof(int))) != NULL){
                printf("\nEnter elements for #%d line:\n", i+1);
                while (j<y){
                    if (flag){
                        scanf("%d", &A[i][j]);
                        if (A[i][j] < 0){
                            flag = 0;
                            printf("You entered a negative number, the line will be completed with digit: %d\n", mel);
                        }
                        else if (mel < A[i][j]) mel = A[i][j];
                    }
                    else A[i][j] = mel;
                    j++;
                }
            }
            else merr1 = 1;
        }
        if (merr1 == 0){
            l = 0;
            if ((n = (int*)malloc(y*sizeof(int))) != NULL){
                for (j=0; j<y; j++){
                    k = 0;
                    for (i=0; i<x; i++){
                        if (A[i][j] % 2 != 0) k += 1;
                    }
                    if (k!=x){
                        l += 1;
                        n[j] = 1;
                    }
                    else n[j] = 0;
                }
                A = deln(x, y, l, n, A);
                puts("\nNew array:");
                for (i=0; i<x; i++){
                    output(i, l, A);
                }
                free(n);
                n = NULL;
            }
        }
        free(A);
        A = NULL;
    }
    return 0;
}

Как бы бесполезное выделение памяти по указателю **m2. Потому что после выделения памяти идет странное условие в строке #17
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 21:42  [ТС]
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Потому что после выделения памяти идет странное условие в строке #17
проверка на выделение памяти
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
22.11.2021, 22:00
Miryz, да, все верно, это я уже гоню, простите.
Ну в функции просто освободите память от первого массива и все. Будет выглядеть так:
Кликните здесь для просмотра всего текста
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
int** deln(int x, int y, int l, int* n, int** m1){
 
    int i, j, q, merr2;
    int **m2;
    merr2 = 0;
 
    if ((m2 = (int**)malloc(x*sizeof(int))) != NULL){
        for (i=0; i<x; i++){
            if ((m2[i] = (int*)malloc(l*sizeof(int))) == NULL){
                merr2 = 1;
            }
        }
        if (merr2 == 0){
            j = 0;
            for (q=0; q<y; q++){
                if (n[q]){
                    for (i=0; i<x; i++){
                        m2[i][j] = m1[i][q];
                    }
                    j++;
                }
            }
            for (int i=0; i<x; i++)
                free(m1[i]);
            free(m1);
//            return m2;
        }
    }
    return m2;
}


Добавлено через 3 минуты
а в функции main(), в конце, аналогичным образом освободите память, занятую под указатель **m2
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
22.11.2021, 22:06  [ТС]
мама Стифлера, да, спасибо, уже все сделал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2021, 22:06

Как двумерный массив char заменить на string?
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { char Str = { &quot;word&quot;, ...

С++, как заменить в коде char массив на enum?
нужно заменить масcив char name на переменную перечисления (вроде так называется) enum(по условии задачи), не знаю как сделать, так как не...

Подскажите как заменить минимальный массив средним арифметическим
и снова здравствуйте, созрел новый вопрос, по другом заданию Наименьший элемент массива, заменить целой частью среднего арифметического...

Заменить минимальный по модулю положительный элемент нулём. Заменить элементы с К1 по K3 на обратный. Из элементоа массива A сформировать массив D тог
Заменить минимальный по модулю положительный элемент нулём. Заменить элементы с К1 по K3 на обратный. Из элементоа массива A сформировать...

Можно ли заменить динамический массив на статический в реализации списка, и если да, то как?
Есть программа с реализованным списком через динамический массив. Много ли нужно будет в ней менять, чтобы сделать массив статическим? ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru