【发布时间】:2019-04-10 00:09:50
【问题描述】:
我知道分段错误发生在哪里,但不知道为什么。
我的主要功能是这样的:
int execute_line(char *line){
char **arguments;
int i = parse_args(arguments,line); //separates line in arguments
printf("Number of tokens: %d \n",i); //prints number of total tokens
printf("%s\n",arguments[0]); //print first token so I know it's not void
int r = check_internal(arguments); //segmentation fault
}
虽然 parse_args 函数填充如下参数:
int parse_args(char **args, char *line){
const char s[]= " \t\n\r";
char *token;
token = strtok(line, s);//separates line with the separators
int i=0;
char null[] = "(null)";
while( token != NULL ) {
if (token[0]=='#'){ //if the like begins with "comment" I don't care
args[i]=null;
return i;
}else{
args[i] = token;// else fills each char * of **args with a token
printf("Parse_args()--> token %d: ",i);
printf("%s\n",token);
i++;
}
token = strtok(NULL, s); //separates again
}
args[i]=null; //ends with null
return i;
}
我不明白为什么在 parse_args 正确返回标记之后它会给出分段错误(因此至少填充了 **arguments)但是当我调用 int r = check_internal(arguments);它给了我分段错误,(如果我在函数的第一行打印它不会显示,所以我想那是断点(打印调试 ftw))。
谁能指出我缺少指向正确内存部分的指针?
错误:分段错误(核心转储)
check_internal: int check_internal(char **args);
如果我的输入是:
hey ho letsgo
程序返回:
Parse_args()--> token 0: hey
Parse_args()--> token 1: ho
Parse_args()--> token 2: letsgo
Number of tokens: 3
hey
Segmentation fault (core dumped)
感谢任何可以帮助我的人:D
【问题讨论】:
-
char **arguments; int i = parse_args(arguments,line);=>arguments未初始化:未定义的行为。还是有一些你没有显示的代码? -
是的,你从来没有在
parse_args中分配args。 -
但如果我在 char **arguments=NULL 处初始化它,它甚至不会显示任何内容,而是直接显示分段错误(核心转储)。我不知道输入有多大,如何在不给它空间的情况下对其进行初始化?
标签: c