Ошибка: размер в памяти неизвестен - C (СИ)
Формулировка задачи:
Приветствую. Есть функция на Си, задача которой - установить выбранный видеорежим.
Но при компиляции gcc на эту функцию ругается, выдавая ошибки:
Погуглил, нашел что-то про динамическое выделение памяти и функцию malloc. Это то, что нужно, или копать в другом направлении? Заранее спасибо.
Листинг программы
- setvid(unsigned char m)
- {
- union REGS r1; struct SREGS r2;
- r1.h.al=m;
- r1.h.ah=0;
- int86x(0x10, r1, r1, r2);
- }
../f.c: В функции <setvid>:
../f.c:15:13: ошибка: размер <r1> в памяти неизвестен
../f.c:15:30: ошибка: размер <r2> в памяти неизвестен
Решение задачи: «Ошибка: размер в памяти неизвестен»
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.
- #include
- подключает библиотеку для работы с дисковыми операциями. - #include
- подключает библиотеку для работы с процессами. - #include
- подключает библиотеку для работы с вводом/выводом данных. В функции main()
: - Создается массив
filename
для хранения имени файла, вводимого пользователем. - Инициализируются регистры
inregs
иoutregs
для работы с дисковыми операциями. - Инициализируется структура
segregs
для работы с сегментами памяти. - Выводится сообщение
Введите имя файла:
и считывается имя файла с помощью функцииgets()
. - Заполняются поля регистра
inregs
для выполнения операции открытия файла. - Заполняется поле
segregs
для работы с сегментами памяти. - Выполняется системный вызов 0x21 (открытие файла) с помощью функции
int86x()
. - Результат выполнения системного вызова сохраняется в регистре
outregs
. - Выводится сообщение
Атрибуты файла:
и выводится значение регистраoutregs.x.cx
, которое содержит атрибуты файла. - Завершается функция
main()
. ОшибкаОшибка: размер в памяти неизвестен
указывает на проблему с выделением памяти для массиваfilename
. В данном коде не выделяется память для хранения строки, введенной пользователем, поэтому размер в памяти неизвестен. Это можно исправить, добавив строкуchar filename[80];
в начале кода для выделения памяти под строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д