Переполнение стека при создании трехмерного массива - C (СИ)
Формулировка задачи:
Нужно создать 2 трехмерных массива:
Но при данной записи, при запуске программы выдается сообщение о переполнении стека.
Но нужны именно такие массивы. Может создать динамические массивы? Если это поможет, подскажите, пожалуйста, как создать динамический трехмерный массив.
Используемый компилятор - MinGW, среда программирования - Dev-C++. Процессор 32-разрядный.
long int mas[100][100][100], mas2[100][100][100];
Решение задачи: «Переполнение стека при создании трехмерного массива»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define AA(i,j,k) aa[(i)*10000+(j)*100+(k)] #define BB(i,j,k) bb[(i)*10000+(j)*100+(k)] int main() { long int *aa, *bb; aa = (long int*)calloc(100*100*100, sizeof(long int*)); bb =(long int*) calloc(100*100*100, sizeof(long int*)); AA(99,99,99)=4567; BB(99,99,99)=-5; printf("%ld\n", AA(99,99,99)+BB(99,99,99)); free(bb); free(aa); return 0; }
Объяснение кода листинга программы
- Объявление двух указателей на long int: aa, bb.
- Выделение памяти под массивы размером 100100100 элементов с помощью функции calloc.
- Присваивание значения переменной AA(99,99,99) равное 4567.
- Присваивание значения переменной BB(99,99,99) равное -5.
- Вычисление значения выражения AA(99,99,99)+BB(99,99,99) и вывод его на экран с помощью функции printf.
- Освобождение памяти, выделенной под массивы aa и bb, с помощью функции free.
- Возврат значения 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д