使用malloc划分字符串时的分段错误

时间:2017-04-27 15:07:25

标签: c arrays malloc ncurses strtok

我正在使用ncurses创建自己的终端。我得到字符串并将其保存在2D数组中,缓冲区[80] [256]。我使用getstr(buffer [i])获取字符串。然后我在main函数中有以下内容;

while (strcmp(buffer[i],"exit")!=0) {
    strcpy(command,buffer[i]);
    printw("%s\n",command);

    //calls the function commands found in another source file
    commands(buffer[i]);
    mvwin(childwin, y, x);
    wnoutrefresh(childwin);
    i++;
    printw("%s",prompt);
    getstr(buffer[i]);
    doupdate();
}

//source file where one finds commands;
//global array
char*final[40];

void commands (char input[]){
  char **buffer =split(input);

...
}

//creating segmentation fault
char **split(char input[]){
  char *ptr;
  int i=0;

  ptr = strtok(input," ");

  while(split != NULL){
    final[i] = malloc(strlen(ptr)+1);
    strcpy(final[i],ptr);
    ptr = strtok(NULL," ");
    i++;
  }
 return final;
}

上述功能正在做什么;它正在接收用户缓冲区[i]的输入,它将字符串分成功能命令中数组缓冲区中的单独元素。例如如果用户输入print hello我的名字是,缓冲在函数命令中保持; buffer [0] = print,buffer [1] = hello buffer [2] = my ....

从我的测试来看,似乎malloc是造成它的东西,但我不知道如何解决它。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

 while(split != NULL){

您需要检查splitNULL,而不是ptr检查NULL

如果是NULL,那么您的malloc将分配1字节,而内存的解除引用会因溢出而导致问题。