簡體   English   中英

分段故障(核心轉儲)

[英]Segmentation fault (core dumped)

我在“操作系統”課程中有一個作業。 我的其余代碼一切都很好,我用“gcc -o test test.c -Werror -Wall -pedantic -Wextra -Watat-errors”編譯它,沒有任何錯誤或任何錯誤。 但是當我運行它時,我得到一個Segmentation故障(核心轉儲)。 我在程序的各個階段放了一些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++;
     }
  }

先感謝您!

C的數組為0索引。 如果i7 ,則argList[i]超出范圍,這是在第一次迭代時發生的事情:

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

首先,在程序參數中,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>>
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM