我正在使用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是造成它的东西,但我不知道如何解决它。
非常感谢你。
答案 0 :(得分:1)
while(split != NULL){
您需要检查split
是NULL
,而不是ptr
检查NULL
。
如果是NULL
,那么您的malloc
将分配1
字节,而内存的解除引用会因溢出而导致问题。