C-使用malloc分配字符串时的分割故障



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

while (strcmp(buffer[i],"exit")!=0) {
    strcpy(command,buffer[i]);
    printw("%sn",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]的输入,并将字符串分为函数命令中数组缓冲区中的单独元素。例如如果用户输入打印Hello我的名字,请使用HOLD命令中的缓冲区;缓冲区[0] =打印,缓冲区[1] = Hello Buffer [2] = my ....

从我的测试中,Malloc似乎是导致它的原因,但我不知道如何解决它。

非常感谢您。

 while(split != NULL){

而不是检查 split NULL您需要检查ptr是否为NULL

如果是NULL,则您的malloc将分配1字节,并且内存的解除将由于溢出而导致问题。

相关内容

  • 没有找到相关文章

最新更新