我正在使用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
字节,并且内存的解除将由于溢出而导致问题。