Почему выделение памяти является статичным? - C (СИ)
Формулировка задачи:
Типы нужны для того чтобы выделять память под числа, буквы? Ну это ясно. Но почему выделение памяти является статичным? Почему программа не выделит переменной "Retron" например столько, сколько она займет при вводе? Когда программа запущена, то как компьютер определяет участок памяти для неё? Как компьютер вообще узнает сколько оперативной памяти ему доступно? Он видимо какими-то тестами это выясняет, но какими?
Решение задачи: «Почему выделение памяти является статичным?»
textual
Листинг программы
char Six(char c) { c &= 15; if (c <= 9) return '0'+ c; else return c - 10 + 'A'; } // ------- void Dump(char *p, int n) { char *q; int i, j; q = (char *)malloc(3*n + n/4 + 1); for(j=i=0; j<n; j++) { sprintf(q+i, "%c%c ", Six(p[j]>>4), Six(p[j]&15)); i += 3; if ((j%4)==0) { q[i] = ' '; i++; } } q[i] = '\0'; printf("%p:%s\n", p, q); free(q); } // *******
Объяснение кода листинга программы
- Функция
Six
принимает один аргумент типаchar
и возвращает модифицированную версию этого аргумента. - В функции
Dump
выделяется память под строку с помощью функцииmalloc
. - В функции
Dump
для каждого символа входной строки вызывается функцияSix
, чтобы получить две цифры (для шестнадцатеричных цифр верхний бит не важен). - В функции
Dump
результат вычисления функцииSix
добавляется в начало строки, которую выделяет функцияmalloc
. - В функции
Dump
после каждого четвертого символа добавляется пробел. - В функции
Dump
после обработки всех символов добавляется нулевой символ в конец строки. - В функции
Dump
выводится на консоль исходная строка и выделенная под нее память. - В функции
Dump
выделенная под строку память освобождается с помощью функцииfree
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д