Я работаю над назначением операционных систем для одного из моих летних классов. Учитель предоставил объектный файл, который предоставляет функции, имитирующие поведение драйвера дискового устройства. Затем мы должны написать API файловой системы, который использует драйвер дискового устройства в C.Функция внезапно возвращается, когда она не должна
Я работаю над своей функцией форматирования файловой системы с именем Format(), которая вызывает функцию с именем DevFormat() из объектного файла учителей. Моя функция должна возвращать 1, если она была в состоянии успешно форматировать файловую систему и 0 в противном случае. DevFormat() возвращает 1, если он смог успешно форматировать диск и 0 в противном случае. Код находок:
int Format()
{
if (!DevFormat())
{
printf("Disk drive wasn't formatted successfully\n");
return 0;
}
<Do some stuff to the file system here>
printf("File system successfully formatted\n");
return 1;
}
Моя проблема в том, что Format() просто резко заканчивается, не возвращая значения. Я обнаружил, что оскорбительным фрагментом кода является строка: if (!DevFormat())
. Теперь я пишу назначение в C, но использую компилятор GNU C++ (g ++) для компиляции и ссылки на мой проект, поскольку учитель сказал, что мы можем. Я хочу сказать, что причина Format() внезапно заканчивается, когда выполняется строка if (!DevFormat())
, должна что-то сделать с интерпретацией моего кода компиляторами (я мог бы быть далеко. Это просто предположение.). Я обнаружил, что моя функция резко заканчивается, если я изменю код на if (0 == DevFormat())
. Единственный способ проверить неудачу - назначить возвращаемое значение DevFormat() переменной int, а затем проверить это.
Любая помощь будет высоко оценена. Это связано с тем, как компилятор C++ интерпретирует мой код? Я пропустил что-то настолько мирское, что мне должно быть стыдно за себя?
Еще раз спасибо за помощь.
Вы пишете код C или код на C++? Если C++, то может ли DevFormat выбрасывать исключение C++? Или, возможно, он вызывает «longjmp» и возвращается к более ранней точке «setjmp»? Прекращается ли вся ваша программа? Если у вас есть доступ к исходному коду 'DevFormat', вы должны просто вставить его в отладчик. – jamesdlin
Пожалуйста, уточните, что «Format() просто резко заканчивается, не возвращая значения». Что это значит? Сбой вашей программы? Также покажите определение функции/подпись DevFormat - ваш стек может быть поврежден. – carlsborg
Segfault или что-то еще вызывает внезапное завершение работы в DevFormat(). Google не возвращает ничего для DevFormat(), поэтому вам нужно опубликовать источник или как его выводить. – 2010-08-10 22:39:40