Ошибка: размер в памяти неизвестен - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую. Есть функция на Си, задача которой - установить выбранный видеорежим.
setvid(unsigned char m)
{
 union REGS r1; struct SREGS r2;
 r1.h.al=m;
 r1.h.ah=0;
 int86x(0x10, r1, r1, r2);
}
Но при компиляции gcc на эту функцию ругается, выдавая ошибки:
../f.c: В функции <setvid>: ../f.c:15:13: ошибка: размер <r1> в памяти неизвестен ../f.c:15:30: ошибка: размер <r2> в памяти неизвестен
Погуглил, нашел что-то про динамическое выделение памяти и функцию malloc. Это то, что нужно, или копать в другом направлении? Заранее спасибо.

Решение задачи: «Ошибка: размер в памяти неизвестен»

textual
Листинг программы
#include<dos.h>
#include<process.h>
#include<stdio.h>
 
int main(void)
{
   char filename[80];
   union REGS inregs,outregs;
   struct SREGS segregs;
   printf("Введите имя файла:");
   gets(filename);
   inregs.h.ah = 0x43;
   inregs.h.al = 0x21;
   inregs.x.dx = FP_OFF(filename);
   segregs.ds = FP_SEG(filename);
   int86x(0x21,&inregs,&outregs,&segregs);
   printf("Атрибуты файла: %X\n",outregs.x.cx);
   return 0;
}

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

В этом коде используются функции и библиотеки для работы с файлами и памятью в языке C.

  1. #include - подключает библиотеку для работы с дисковыми операциями.
  2. #include - подключает библиотеку для работы с процессами.
  3. #include - подключает библиотеку для работы с вводом/выводом данных. В функции main():
  4. Создается массив filename для хранения имени файла, вводимого пользователем.
  5. Инициализируются регистры inregs и outregs для работы с дисковыми операциями.
  6. Инициализируется структура segregs для работы с сегментами памяти.
  7. Выводится сообщение Введите имя файла: и считывается имя файла с помощью функции gets().
  8. Заполняются поля регистра inregs для выполнения операции открытия файла.
  9. Заполняется поле segregs для работы с сегментами памяти.
  10. Выполняется системный вызов 0x21 (открытие файла) с помощью функции int86x().
  11. Результат выполнения системного вызова сохраняется в регистре outregs.
  12. Выводится сообщение Атрибуты файла: и выводится значение регистра outregs.x.cx, которое содержит атрибуты файла.
  13. Завершается функция main(). Ошибка Ошибка: размер в памяти неизвестен указывает на проблему с выделением памяти для массива filename. В данном коде не выделяется память для хранения строки, введенной пользователем, поэтому размер в памяти неизвестен. Это можно исправить, добавив строку char filename[80]; в начале кода для выделения памяти под строку.

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


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

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

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