Ошибка: размер в памяти неизвестен - 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];
в начале кода для выделения памяти под строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д