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