单步执行,直到退出没有行号信息的函数__svfscanf_l
Single stepping until exit from function __svfscanf_l, which has no line number information
我正在制作一个C程序。我有一个功能,一切似乎都很好。但是,如果我向其添加另一个变量,它突然不起作用,并且出现分段错误。(如果我使用 gdb,我会收到错误:单步直到退出函数 __svfscanf_l,没有行号信息。程序接收信号:"EXC_BAD_ACCESS"。
这是我的函数:
void condition(char *command) {
printf("CAMMAND: %sn", command);
char *cond;
char *expression;
char *file;
char *buffer;
buffer = malloc(200 * sizeof(char));
sscanf(command, "%s ( %s %s ) %[^n]", cond, expression, file, buffer);
printf("COND: %sn", cond);
printf("EX: %sn", expression);
printf("File: %sn", file);
printf("Command: %sn", buffer);
if (!strcmp(expression, "checke")) {
printf("CHECK EXISTSn");
if (file_exists(file)) {
printf("EXISTSn");
}
} else if (!strcmp(expression, "checkd")) {
printf("CHECK DIRn");
} else if (!strcmp(expression, "checkr")) {
printf("READn");
} else if (!strcmp(expression, "checkw")) {
printf("CHECK WRITEn");
} else if (!strcmp(expression, "checkx")) {
printf("CHECK EXn");
} else {
printf("NOOOOn");
}
}
但是,如果我甚至将其更改为如下所示的内容,则会出现错误。它似乎在 sscanf 电话中失败了。但是当我不添加一些变量时,这有效。
void condition(char *command) {
int flag;
printf("CAMMAND: %sn", command);
char *cond;
char *expression;
char *file;
char *buffer;
buffer = malloc(200 * sizeof(char));
sscanf(command, "%s ( %s %s ) %[^n]", cond, expression, file, buffer);
printf("COND: %sn", cond);
printf("EX: %sn", expression);
printf("File: %sn", file);
printf("Command: %sn", buffer);
if (!strcmp(expression, "checke")) {
printf("CHECK EXISTSn");
if (file_exists(file)) {
printf("EXISTSn");
}
} else if (!strcmp(expression, "checkd")) {
printf("CHECK DIRn");
} else if (!strcmp(expression, "checkr")) {
printf("READn");
} else if (!strcmp(expression, "checkw")) {
printf("CHECK WRITEn");
} else if (!strcmp(expression, "checkx")) {
printf("CHECK EXn");
} else {
printf("NOOOOn");
}
}
似乎想不通这是为什么。任何帮助都会很棒!
内存损坏是因为将指针传递给字符,而不是指向字符数组的指针,作为%s
转换的目标。 expression
,如定义,是未初始化的,并指向某个随机内存位置。 以下是sscanf
文档的相关部分:
s Matches a sequence of non-white-space characters; the next
pointer must be a pointer to character array that is long enough
to hold the input sequence and the terminating null character
您需要为expression
等分配一些空间。
相关文章:
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- 使用一个回调函数从多个订阅者分配信息
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- 是否存在与 Eigen::Matrix<>constexpr 构造函数相关的信息?
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- 使用友元函数从多态类中检索类型信息
- Windows表单如何使用其他函数回调图表信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 函数从模板参数中获取字段值,而不是直接访问以允许对相同信息使用不同的名称
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- LDAP函数中是否有任何功能可以在不使用ldap_search的情况下获取用户信息
- 获取有关 ELF 中的函数和相关符号的信息
- 当所有信息都在头文件中时,未定义对函数的引用
- 将信息从运行函数发送到另一个
- 如何根据其ARITY(或编译时已知的其他信息)以不同的方式调用函数对象
- C 调用从TXT文件输出信息的函数
- 单步执行,直到退出没有行号信息的函数__svfscanf_l