Почему выделение памяти является статичным? - 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);
}
// *******

Объяснение кода листинга программы

  1. Функция Six принимает один аргумент типа char и возвращает модифицированную версию этого аргумента.
  2. В функции Dump выделяется память под строку с помощью функции malloc.
  3. В функции Dump для каждого символа входной строки вызывается функция Six, чтобы получить две цифры (для шестнадцатеричных цифр верхний бит не важен).
  4. В функции Dump результат вычисления функции Six добавляется в начало строки, которую выделяет функция malloc.
  5. В функции Dump после каждого четвертого символа добавляется пробел.
  6. В функции Dump после обработки всех символов добавляется нулевой символ в конец строки.
  7. В функции Dump выводится на консоль исходная строка и выделенная под нее память.
  8. В функции Dump выделенная под строку память освобождается с помощью функции free.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы