От новичка до гуру: Курсы программирования на CyberDuff

Ошибка сегментации (дамп ядра)

У меня задание по классу «Операционные системы». С остальным кодом все в порядке, я компилирую его с помощью «gcc -o test test.c -Werror -Wall -pedantic -Wextra -Wfatal-errors», без ошибок или чего-то еще. Но когда я запускаю его, я получаю ошибку сегментации (дамп ядра). Я помещаю printf на разных этапах программы, чтобы увидеть, в какой момент я получаю сообщение об ошибке (вставлено !!, здесь возникает проблема). У меня нет вариантов по этому поводу. Любая помощь приветствуется!

Часть программы:

void inputToken(char *cmdInput)
{
int i;
int quit = 0;
char *token;
char *argList[] = {"\0", "\0", "\0", "\0", "\0", "\0", "\0"};
char *argv[] = {"&", "%"};

token = strtok(cmdInput, " ");
i = 0;

while(token != NULL && i<7)
{
argList[i] = token;
token = strtok(NULL, " ");
i++; 
}

for(i=7; i>0; i++)
{
if(strcmp(argList[i], argv[0]) == 1) !!PROBLEM OCCURS HERE
    {
    <<SOME CODE>>
         }
 }
}


/*READING USER COMMAND*/
void usrInput()
{
int c;
int i=0;
char cmd[101];

while((c = getchar()) != EOF)
{
 if(c == '\n')
   break;
else if(i<100){
 cmd[i]=c;
 i++;
     }
  }

Заранее спасибо!


  • Подумайте о for(i=7; i>0; i++) снова. 16.11.2013
  • Скомпилируйте со всеми предупреждениями и информацией об отладке gcc -Wall -g и используйте отладчик gdb !!! 16.11.2013

Ответы:


1

Массив в C имеет индекс 0. argList[i] выходит за пределы, если i равно 7, и это то, что происходит на первой итерации:

for(i=7; i>0; i++)
{
  if(strcmp(argList[i], argv[0]) == 1) !!PROBLEM OCCURS HERE
    {
    <<SOME CODE>>
         }
  }
}
16.11.2013
  • Конечно! Прямо у меня на глазах! Спасибо, Ивайло Странджев! 16.11.2013

  • 2

    Во-первых, в параметрах программы argv [0] - это имя вашей программы, поэтому оно никогда не будет равно "\ 0":

    ./prog 12 lol -> argv[0] = "prog" | argv[1] = "12" | argv[2] = "lol"
    

    Затем, чтобы избежать ошибки seg, вы должны знать, что массив основан на 0. Итак, ваш массив argList имеет размер 7, от 0 до 6 (var i должен быть DEcremented):

    for (i = 6; i >= 0; i--)
      if(strcmp(argList[i], argv[0]) == 1) !! NO PROBLEM OCCURS HERE
        {
        <<SOME CODE>>
        }
      }
    }
    
    16.11.2013
    Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..