Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
sandanen
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 19
1

Динамическое распределение памяти

25.11.2014, 22:17. Просмотров 411. Ответов 3
Метки нет (Все метки)

Надо добавить в двумерный массив строку с указанным номером , но не работает , как то неправильно добавляю память realloc-ом
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
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int dob(char **arr[], int nl, int ml, int kl){
    int i, j;
    j=0;
    arr=(int**)realloc(arr, (nl+1)*sizeof(int*));
 
    arr[nl]=(int*) realloc(arr, ml*sizeof(int));
    for(i=0; i<ml; i++){
        arr[kl][i]=arr[nl][i];
    }
     
 
    return(i);
}
void main (void) {
int **a, n, m,k, l, i,j, f;
printf("Vvedite kol-vo strok__");
scanf("%d", &n);
printf("Vvedite kol-vo stolbcov__");
scanf("%d", &m);
a=(int**) malloc(n*sizeof(int*));
for(i=0; i<n; i++){
    a[i]=(int*) malloc(m*sizeof(int));
    for(j=0; j<m; j++){
                printf("a[%d][%d]", i, j);
    scanf("%d", &a[i][j]);
    }
    }
    printf("vvedite stroku kotoruyu nado dobavit_");
    scanf("%d", &k);
    
    f=dob(a, n, m, k);
    printf("poluchenniy massiv__\n");
    for(i=0; i<n+1; i++){
        for(j=0; j<m; j++){
                printf("%3d", a[i][j]);
        }
        printf("\n");
 
    }
 
    for(i=0; i<n+1; i++){
        free(a[i]);
    }
    free(a);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2014, 22:17
Ответы с готовыми решениями:

Динамическое распределение памяти
#include &lt;stdio.h&gt; #define NUM 5 #define PREDM 1 typedef struct { char fam,name ; int...

Динамическое распределение памяти
Здравствуйте, помогите в решении задачи. Дана действительная квадратная матрица порядка n....

Динамическое распределение памяти
Дан массив действительных случайных чисел а размером n=100. Выве-сти на экран те элементы массива,...

Динамическое распределение памяти в языке С
Помогите, пожалуйста решить задачу на С. В программе определите и инициализируйте переменную X...

Динамическое распределение памяти для символьной строки
Объясните, пожалуйста, почему при динамическом распределнии памяти под символьный массив у меня все...

3
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4854 / 2497 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
25.11.2014, 22:24 2
Ошибок много, но в первую очередь

Цитата Сообщение от sandanen Посмотреть сообщение
int dob(char **arr[], int nl, int ml, int kl)
В честь чего это массив вдруг стал 'char **arr[]', в то время как в main он является 'int **'???

Эта грубейшая ошибка был явно, громко и точно указана вам компилятором при вызове функции 'dob'. Почему вы проигнорировали эту ошибку? Какие могут быть вообще вопросы про "неправильно добавляю память realloc-ом", если программа содержит явную семантическую ошибку уровня компиляции?
0
sandanen
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 19
25.11.2014, 23:14  [ТС] 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
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int dob(int **arr[], int nl, int ml, int kl){
    int i, j;
    j=0;
    arr=(int**)realloc(arr, (nl+1)*sizeof(int*));
 
    arr[nl]=(int*) realloc(arr, ml*sizeof(int));
     for(i=0; i<ml; i++){
        arr[kl][i]=arr[nl][i];
     }
 
 
    return(i);
}
void main (void) {
int **a, n, m,k, l, i,j, f;
printf("Vvedite kol-vo strok__");
scanf("%d", &n);
printf("Vvedite kol-vo stolbcov__");
scanf("%d", &m);
a=(int**) malloc(n*sizeof(int*));
for(i=0; i<n; i++){
    a[i]=(int*) malloc(m*sizeof(int));
    for(j=0; j<m; j++){
                printf("a[%d][%d]", i, j);
    scanf("%d", &a[i][j]);
    }
    }
    printf("vvedite stroku kotoruyu nado dobavit_");
    scanf("%d", &k);
    
    f=dob(a, n, m, k);
    printf("poluchenniy massiv__\n");
    for(i=0; i<n+1; i++){
        for(j=0; j<m; j++){
                printf("%3d", a[i][j]);
        }
        printf("\n");
 
    }
 
    for(i=0; i<n+1; i++){
        free(a[i]);
    }
    free(a);
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4854 / 2497 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
26.11.2014, 03:30 4
Цитата Сообщение от sandanen Посмотреть сообщение
int dob(int **arr[], int nl, int ml, int kl){
Лучше не стало. В списке параметров функции 'int **arr[]' эквивалентно 'int ***arr'. В 'main' же у вас 'int **a'. Тип 'int ***' и тип 'int **' - совершенно разные типы.

Опять же, вам компилятор ясно про это сказал при вызове функции 'dob', как и в прошлый раз. Почему вы продолжаете игнорировать диагностические сообщения компилятора?
0
26.11.2014, 03:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 03:30

Обработка массивов данных. Указатели. Динамическое распределение памяти
Помогите написать коды на си 1.Найти максимальный по модулю элемент массива. 2. Найти сумму...

Динамическое распределение памяти: программа, вылетает на вводе непосредственно первого элемента массива
Исправте пожалуйста, вылетает на вводе непосредственно первого элемента массива из символов!...

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые&quot;дыры&quot; избегают,что нужно сделать что бы малые &quot;дыры&quot; не избегались.... #...


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

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

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