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

Изменение максимального количества элементов массива

24.06.2018, 06:11. Просмотров 781. Ответов 3

Здравствуйте!
Написал программу, в которой пользователь вводит с клавиатуры число (переменная koll), дальше создаётся двумерный массив типа float с [4*(koll-1)] количеством строк и [4*(koll-1)+1] количеством столбцов. Дальше идёт заполнение и преобразование массива. Программа работает нормально при вводе числа <180, если koll>180 программа просто завершается.

C
1
2
3
4
5
6
7
8
void kub_spline()
{
 int koll;
    printf("Vvedite kolichestvo ismerennih znacheny ");
    scanf("%d", &koll);
    float  tomass [4*(koll-1)][4*(koll-1)+1];
 
...
Возможно, превышено какое то ограничение максимального количества элементов массива или что то другое?
Как можно исправить?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2018, 06:11
Ответы с готовыми решениями:

Изменение количества строк и столбцов массива
Не работает часть кода : scanf(&quot;%d&quot; , &amp;str); mas = (int**)realloc(mas,str*sizeof(int*)); for...

Посчитать количество элементов двумерного массива, стоящих до максимального элемента этого массива
Посчитать количество элементов двумерного массива, стоящих до максимального элемента этого массива.

Найти среднее арифметическое элементов массива без учета минимального и максимального элементов
Помогите пожалуйста. В задаче неправильно считает среднее арифметическое чисел массива. Текст...

Выделение минимального и максимального элементов массива
Найти максимальный элемент и поменять его местами с последним элементом массива. В программе...

Вывести значения минимального и максимального элементов массива
Помогите, пожалуйста, найти ошибки. Задача В. Ввести с клавиатуры количество элементов массива N,...

3
stake-k26
618 / 432 / 332
Регистрация: 25.04.2016
Сообщений: 1,218
24.06.2018, 09:15 2
Может дело в том, что умножать на 4 не самая лучшая затея? Почитайте на досуге: "Корректное освобождение памяти",- посмотрите на предложенные примеры, сравните со своими наработками.
1
ValeryS
Модератор
7482 / 5665 / 725
Регистрация: 14.02.2011
Сообщений: 19,367
Завершенные тесты: 1
24.06.2018, 09:37 3
Цитата Сообщение от Gisterezis12 Посмотреть сообщение
Возможно, превышено какое то ограничение максимального количества элементов массива или что то другое?
стэк кончился располагай массив в куче при помощи malloc
2
stake-k26
618 / 432 / 332
Регистрация: 25.04.2016
Сообщений: 1,218
24.06.2018, 09:51 4
Лучший ответ Сообщение было отмечено Gisterezis12 как решение

Решение

Например, код:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* *************************************************************
 * заполняет двумерный динамический массив случайными значениями
 * ************************************************************/
int ** create_arr2d (int, int); // создаем int a[int][int]
void delete_arr2d (int **);     // освобождаем память, занятую int a[int][int]
void genertor_a2d (int **, int, int);               // заполняем случайными
void printf_arr2d (int **, int, int);               // выводим на экран
 
int main (void)
{
    srand((unsigned int)time(NULL)/2);
    int n, m;
    printf("size1 = ");     scanf("%d", &n);
    printf("size2 = ");     scanf("%d", &m);
    if (n<1 || m<1) exit(EXIT_FAILURE);
 
    int ** z = NULL;
    if ((z = create_arr2d(n, m)) == NULL)
    {
        printf("Can't create array!\n");
        exit(EXIT_FAILURE);
    }
 
    genertor_a2d(z, n, m);
    printf("\n");
    printf_arr2d(z, n, m);
 
    delete_arr2d(z);
    exit(EXIT_SUCCESS);
}
// ------------------------------------------------------------
// ----------------- создаем двумерный массив -----------------
int ** create_arr2d (int size1, int size2)
{
    int i, ** z = NULL;
    if ((z = (int **) malloc(size1*sizeof(int *))) == NULL) return NULL;
    if ((z[0] = (int *) malloc(size1*size2 * sizeof(int))) == NULL)
    {
        free(z);
        return NULL;
    }
    for (i=1; i<size1; i++)
        z[i] = z[i-1] + size2;
    return z;
}
// ------------------------------------------------------------
// ------ освобождаем память, занятую двумерным массивом ------
void delete_arr2d (int ** a)
{
    free(a[0]);
    free(a);
}
// ------------------------------------------------------------
// ----- заполняем двумерный массив случайными значениями -----
void genertor_a2d (int ** a, int size1, int size2)
{
    int i, k;
    for (i=0; i<size1; i++)
        for (k=0; k<size2; k++)
            a[i][k] = 1 + rand() %10;
}
// ------------------------------------------------------------
// ------------ выводим двумерный массив на экран -------------
void printf_arr2d (int ** a, int size1, int size2)
{
    int i, k;
    for (i=0; i<size1; i++)
    {
        for (k=0; k<size2; k++)
            printf("% 4d", a[i][k]);
        printf("\n");
    }
}
Легко справляется с массивом A[1000][1000].

Gisterezis12, на выполнение вашей программы всегда выдается определенное количество оперативной памяти, обычно что-то около 4 мегабайт. Эту память принято называть стеком. Когда вы объявляете массив как:

int a[5][12]
double k[200]

и так далее.. - память для хранения массива выдается вам из стека, т.е. из той памяти, что была выдана программе при запуске, и максимальный объем этой памяти ограничен. Для того, чтобы обойти это ограничение, вы должны запросить дополнительную память, как уже сказал ValeryS, это делается с помощью команд malloc или calloc.

Ну а примеры того, как это сделать, вы найдете выше.

Конечно, это очень грубое описание, но думаю вам пока не стоит с ходу в дебри лезть.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2018, 09:51

Вычислить сумму максимального и минимального элементов массива
Я вот написал прогу на си, Задание было вот какое: Вычислить сумму максимального и минимального...

Найти сумму минимального и максимального элементов массива
Написал программу,компилятор ошибок не дал,но программа после ввода массива ничего дальше не...

Функция: найти разность минимального и максимального элементов массива
дан целочисленный массив, найти разность минимального и максимального элементов в отдельной функции


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

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

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